Mongodb $lookup 在多个字段上

标签 mongodb

我有两个集合, productsproperties

我正在查找,例如:

[{
        $match: {
            category_id: mongoose.Types.ObjectId(category_id)
        }
    },
    {
        $lookup: {
            from: "properties",
            localField: "category_id",
            foreignField: "category_id",
            as: "properties"
        }
    }
]

这基本上是让我获得与 category_id 匹配的所有产品,并包括与相同 category_id 匹配的属性。

我需要为 some_id 结果上的 properties 添加一个额外的检查。换句话说, properties 应该按从 some_id 集合返回的 products 分组,并匹配 properties 中的相同键。那有意义吗?基本上能够拥有多个本地/外部字段定义。

知道我怎么能这样吗?

最佳答案

从 3.6 版开始,我们可以使用不相关的子查询

{
   $lookup:
     {
       from: <collection to join>,
       let: { <var_1>: <expression>, …, <var_n>: <expression> },
       pipeline: [ <pipeline to execute on the collection to join> ],
       as: <output array field>
     }
}

这允许我们在查找中拥有多个相等匹配。
另见:https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

关于Mongodb $lookup 在多个字段上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46122805/

相关文章:

mongodb - 如何对 MongoDB 文档中的散列执行此查询(使用 Mongoid)

mongodb - MongoDB oplog 操作字母是什么意思?

mongodb - pymongo 聚合不允许解释选项

java - 如何使用 Java Webapp 将文件上传到 MongoDB?

node.js - 如何标记多个MongoDB文档进行处理?

node.js - 通过 _id nodejs mongodb native 查找 mongodb 文档

node.js - Mongoose findById 没有返回所有字段

mongodb - 将 mongodb 聚合中的值转换为键

mongodb - 在 mongoimport --jsonArray 上的子文档上创建 _id

MySQL 与 MongoDB 1000 次读取