Meteor 如何高效地发布集合中的文档?

Meteor how to efficiently publish documents from a collection?

Collection 中的文档包含一个名为 userId 的字段,用于存储创建文档的用户的 _id。一个用户可以创建多个文档。

此文档的 _id 存储在用户配置文件中的数组中,其中包含他们创建的所有文档 _id

由于文档_id的所有字段都被索引了,下面这两个游标在查找和发布的速度上有很大的差别吗?我问这个集合将包含数千个文档。

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

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

让我们支持一下... 如果 1 个用户有很多文档,每个文档有 1 个用户,为什么要将它存储在 2 个地方?您正在将对数据库的写入加倍,并使自己面临不一致。只需将 userId 存储在文档中,索引该字段,然后就可以完成了。

回答你的问题: 第一个不会真正使用索引,因为您实际上是在传递一个数组,mongo 必须遍历该数组以查看其中一个值是否与 id 匹配。 如果你的 _id 是 3,它大致相当于:

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

您可以通过调用 .explain() 来验证这一点,并查看它接触了多少文档、它使用的索引以及它花费的时间。

值得庆幸的是,none 在您达到数十万之前它真的很重要,但提前做好工作计划!