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



我有一个这样的集合:

{
   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,但我不能用它们来解决我的问题。

像这样的聚合管道

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"
        }
    ]
}

相关内容

  • 没有找到相关文章

最新更新