猫鼬如何在引擎盖下填充工作
How does mongoose populate work under the hood
有人能告诉我怎么做吗
我有一个collection
a {
b: String
c: Date
d: ObjectId --> j
}
j {
k: String
l: String
m: String
}
当我执行:
a.find({ b: 'thing' }).populate('d').exec(etc..)
在后台,这实际上是针对 MongoDB 执行两次查询,以便 return 所有项目 'j'?
我对填充工作没有任何问题,我担心的是任务的性能影响。
谢谢
Mongoose 使用两个查询来完成请求。
查询a
集合获取与主查询匹配的文档,然后查询j
集合填充文档中的d
字段。
您可以通过启用调试输出来查看 Mongoose 正在使用的查询:
mongoose.set('debug', true);
基本上,模型“a”包含一个属性“d”,它引用(指向)模型“j'.
所以每当我们使用
a.find({ b: 'thing' }).populate('d').exec(etc..)
然后通过填充我们可以单独调用 'j' 的属性,例如:
- d.k
- d.l
- d.m
Populate() 帮助我们调用其他模型的属性。
添加到@JohnnyHK 关于您担心的任务的性能影响的回答,我相信无论如何,无论我们使用 mongoose 提供的 populate()
方法还是您将使用的方法,这些查询都必须按顺序执行服务端实现,两者时间复杂度相同
这是因为为了填充我们需要第一个查询的结果,得到结果后 uuid 将用于查询另一个集合中的文档。
所以我认为在服务器端进行这些更改比使用 mongoose 提供的方法更浪费。性能将保持不变。
有人能告诉我怎么做吗
我有一个collection
a {
b: String
c: Date
d: ObjectId --> j
}
j {
k: String
l: String
m: String
}
当我执行:
a.find({ b: 'thing' }).populate('d').exec(etc..)
在后台,这实际上是针对 MongoDB 执行两次查询,以便 return 所有项目 'j'?
我对填充工作没有任何问题,我担心的是任务的性能影响。
谢谢
Mongoose 使用两个查询来完成请求。
查询a
集合获取与主查询匹配的文档,然后查询j
集合填充文档中的d
字段。
您可以通过启用调试输出来查看 Mongoose 正在使用的查询:
mongoose.set('debug', true);
基本上,模型“a”包含一个属性“d”,它引用(指向)模型“j'.
所以每当我们使用
a.find({ b: 'thing' }).populate('d').exec(etc..)
然后通过填充我们可以单独调用 'j' 的属性,例如:
- d.k
- d.l
- d.m
Populate() 帮助我们调用其他模型的属性。
添加到@JohnnyHK 关于您担心的任务的性能影响的回答,我相信无论如何,无论我们使用 mongoose 提供的 populate()
方法还是您将使用的方法,这些查询都必须按顺序执行服务端实现,两者时间复杂度相同
这是因为为了填充我们需要第一个查询的结果,得到结果后 uuid 将用于查询另一个集合中的文档。
所以我认为在服务器端进行这些更改比使用 mongoose 提供的方法更浪费。性能将保持不变。