如何比较mongoDB中聚合过滤器中的两个字段

时间:2016-08-08 05:45:26

标签: mongodb filter aggregation-framework

我有一个这样的集合:

{
   side1:"apple",
   side2:"peach",
   a1:[
      {_id:"apple", info:"test"},
      {_id:"orange", info:"test"},
   ],
   a2:[{_id:"banana", info:"test"},
      {_id:"peach", info:"test"},
      {_id:"apple", info:"test"}]
}

我正在寻找一种方法来仅列出a1a2的子文档,其_id值分别等于side1side2。 我的意思是结果如下:

{
   side1:"apple",
   side2:"peach",
   a1:{_id:"apple", info:"test"},
   a2:{_id:"peach", info:"test"}
}

我搜索了很多内容,但我读过有关$filter$elemMatch$where的内容,但我无法使用它们来解决我的问题。

1 个答案:

答案 0 :(得分:2)

像这样的聚合管道

db.getCollection('yourColl').aggregate([
    {
        $project: {
            _id: 0,
            side1: 1,
            side2: 2,
            a1: {
                $filter: {
                    input: "$a1",
                    as: "e",
                    cond: { 
                        $eq: ["$$e._id", "$side1" ]
                    }
                }
            },   
            a2: {
                $filter: {
                    input: "$a2",
                    as: "e",
                    cond: { 
                        $eq: ["$$e._id", "$side2" ]
                    }
                }
            }
        }
    }
])  

将为您的样本数据提供此输出

{
    "side1" : "apple",
    "side2" : "peach",
    "a1" : [ 
        {
            "_id" : "apple",
            "info" : "test"
        }
    ],
    "a2" : [ 
        {
            "_id" : "peach",
            "info" : "test"
        }
    ]
}