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 在您达到数十万之前它真的很重要,但提前做好工作计划!
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 在您达到数十万之前它真的很重要,但提前做好工作计划!