2015-04-17 56 views
1

Collection中的文档包含一个名为userId的字段,该字段存储创建该文档的用户的_id。用户可能会创建多个文档。流星如何从集合中有效地发布文档?

该文件的_id存储在阵列内的用户配置文件whcih包括他们已经创造了

由于所有文件_id字段建立索引,是有速度的巨大差异,找到所有文档_id并在以下两个游标之间发布?我在问,这个藏品将会保存数千份文件。

Collection.find({_id: {$in: {arrayOf_ids}}}) 

Collection.find({'userId': this.userId}) 

回答

2

让备份蜱... 如果1个用户有很多文档,每个文档有1个用户,你为什么将其存储在两个地方?您将自己写入数据库的次数增加了一倍,从而使自己面临不一致。只需将userId存储在文档中,该字段的索引即&即可完成。

回答你的问题: 第一个不会真的使用索引,因为你本质上是传入一个数组,mongo必须迭代以查看是否有一个值与id匹配。 如果您_id是3,它是大致相当于:

array = [1,2,3] 
array.indexOf(3); 

您可以验证通过调用.explain(),看看它是多少文档触动,它使用了索引,&所花费的时间。谢谢,直到你达到成千上万,没有一件事情真的很重要,但提前做好计划!

+0

一个用户有很多文档,正如我已经解释过的,这些文档id存储在用户配置文件中供他们参考。关于mongo如何遍历数组的说明很有帮助。谢谢Matt – meteorBuzz

+1

的权利,而不是存储在用户配置文件中的ID,订阅文档集合。 –