mongodb联表查询可以使用mongoose的pupulate(),也可以使用聚合$lookup,如果使用两次单表查询:
//one
{
_id: "joe",
name: "Joe Bookreader"
}
//two
{
patron_id: "joe",
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
{
patron_id: "joe",
street: "1 Some Other Street",
city: "Boston",
state: "MA",
zip: "12345"
}
db.ones.findOne({_id:'joe'))
db.twos.find({patron_id:'joe'})
执行两次单表查询,_id,patron_id都有索引,patron_id对应为joe数量为个位数,索引粒度很低,能过滤很多数据,那么这两次查询是不是也应该很快(都在内存里),这和$lookup查询比起来谁的效率会好一些?聚合$lookup查询是不是内部也是这样做了两次find查询,foreignField对应键上有无索引应该很影响查询效率吧?
db.ones.aggregate([
{
$lookup:
{
from: "twos",
localField: "_id",
foreignField: "patron_id",
as: "arrs"
}
},
{ $match : {_id:'joe') }
])