考虑以下文档
{
lists: {
list1: [ ObjectId(1), ObjectId(2) ],
list2: [ ObjectId(1), ObjectId(3) ],
list3: [ ObjectId(4), ObjectId(5), ObjectId(1)]
}
}
它包含对另一个集合的引用数组,例如Products
当我返回API的响应时,我想要所有这些产品的名称。所以我用填充
Something.populate({ path:'lists', select: 'name')
这工作正常,它使用产品名称填充列表数组。但是我可以看到在猫鼬调试模式下,每个查询都是分别执行的。
Product.find({ _id: { $in:[ 1, 2 ]})
Product.find({ _id: { $in:[ 1, 3 ]})
Product.find({ _id: { $in:[ 4, 5, 1 ]})
这些列表中可以包含大量具有相同ID的元素,这意味着猫鼬在内部多次查询相同的ID。
我也在使用cachegoose,但是由于这些是填充查询,因此缓存值在这些查询中没有任何作用。任何改善此性能的建议。