我发现多个帖子和指南称赞使用populate()
方法在Mongoose和MongoDB中进行连接的能力。
这让我很困惑。如果要进行连接,是否应该使用SQL数据库?不应该加入MongoDB作为最后的手段吗?
使用populate()
的每个对象都需要执行第二次查询来获取该数据。因此,如果您在查询中获取100个项目,则需要再执行100个查询来获取该数据。这听起来像存储它作为嵌套方案是一种更好的想法。
我错了吗? populate()
实际上是一个有意义的好方法吗?或者我是对的,你可以在应该避免的情况下使用它是最后的选择吗?
答案 0 :(得分:1)
populate()不会为每个父文档的每个子文档发送find
个请求。
它会在过滤器中发送一个包含所有子ObjectIds(所有父项!)的单find
。
示例(mongoose.set('debug', true)
控制台输出):
Mongoose: parent.find({}, { fields: {} }) // was called with populate()
Mongoose: child.find({ _id: { '$in': [ ObjectId(A), ObjectId(B), ...] }})
然后可能"加入"父母对节点中的孩子。
基本上,只添加了1个RTT。为了尽可能地避免这种情况,我对一些用于常见用例的模式进行了非规范化。