Collection
中的文档包含一个名为userId
的字段,用于存储创建文档的用户的_id
。用户可以创建许多文档。
此文档的_id
存储在用户个人资料中的数组中,其中包含他们创建的所有文档_id
由于所有文档_id
字段都已编入索引,因此在以下两个游标之间查找和发布的速度是否存在巨大差异?我问,因为该集合将收集数以千计的文件。
Collection.find({_id: {$in: {arrayOf_ids}}})
或
Collection.find({'userId': this.userId})
答案 0 :(得分:2)
让我们回过头来......
如果1个用户拥有多个文档,并且每个文档有1个用户,为什么要将其存储在2个位置?你将对DB和DB的写入加倍。打开你自己的不一致。只需将userId
存储在文档上,将该字段编入索引即可。完成它。
回答你的问题:
第一个不会真正使用索引,因为你实际上是在传入一个mongo必须遍历的数组,以查看其中一个值是否与id匹配。
如果您的_id
为3,则大致相当于:
array = [1,2,3]
array.indexOf(3);
您可以通过致电.explain()
来验证该内容,并查看其触摸的文档数量,使用的索引,以及需要的时间。
值得庆幸的是,在你达到成千上万之前,这一切都不重要,但提前做好工作计划!