mongodb对于两张表的关联查询,使用一次聚合查询$lookup,还是使用多次单表查询?

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') }
])
阅读 4.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进