猫鼬填充与聚合

时间:2019-04-08 14:31:41

标签: node.js mongodb mongoose

我注意到猫鼬4.7.3中的.populate函数针对每次查找在数据库上运行单独的查询:

  db.House
    .populate('ownerId')
    .exec((err, result) => {
    ..

借助聚合管道,我们可以通过单个查询查找多个集合:

    db.House.aggregate([
    {
      $lookup:
      {
        from: 'owners',
        localField: 'ownerId',
        foreignField: '_id',
        as: 'owner',
      },

猫鼬用.populate进行单独查询的原因是什么?聚合函数在查找时性能更高吗?

1 个答案:

答案 0 :(得分:2)

以下是区别的摘要:

$lookup

  • 只能与aggregate
  • 一起使用
  • 只能用于从未分片的集合中提取引用的文档
  • 可以按任意字段提取引用的文档
  • 性能更高,因为它是服务器端的操作
  • 需要MongoDB 3.2 +

猫鼬populate()

  • 可以与findaggregate一起使用
  • 可用于从分片和未分片集合中提取引用的文档
  • 只能通过_id提取引用的文档
  • 没有MongoDB版本要求