繁体   English   中英

检查数组中的2个字段并组合两个数组以获得单个数组Mongodb

[英]Checking 2 fields in array and combine two arrays to get single array Mongodb

我有一个收藏

{
_id:"123",
obj1:[{defaultNo:1,fine:100},{defaultNo:3,fine:10}],
obj2:[{default:1},{default:2},{default:3}]
}

我尝试过类似的操作,但被卡住了

db.collection.aggregate([
// Match possible documents
{ "$match": {
    "_id" : "123"
}},
{ "$unwind": "$obj1" },{
    "$group": {
    "_id": { 
        "document": "$_id", 
        "objfirst" : "$obj1.defaultNo",
        "objlast":"$obj2"
    },

} }  ])

这给了我一个结果

   "_id" : {
                "document" : "123",
                "objfirst" : "1",
                "objlast" : [{default:1},{default:2},{default:3}]
},  "_id" : {
                "document" : "123",
                "objfirst" : "2",
                "objlast" : [{default:1},{default:2},{default:3}]
},

但是我一直在寻找这种类型的结果,例如将两个数组与字段值合并

{
_id:"123",
object:[{default:1,fine100},{default:2,fine:false},{default:3,fine:10}]
}

我建议您看一下$concatArrays运算符,该运算符确实在寻找您想要的东西。

如果您在Shell中执行以下查询,

db.collection.aggregate([
  {$match:{_id:"123"}},
  {$project:{object:{$concatArrays:["$obj1","$obj2"]}}}
])

输出将是(使用样本输入文档与您期望的输出紧密匹配)

{ 
    "_id" : "123", 
    "object" : [
        {
            "default" : 1.0, 
            "fine" : 100.0
        }, 
        {
            "default" : 3.0, 
            "fine" : 10.0
        }, 
        {
            "default" : 1.0
        }, 
        {
            "default" : 2.0
        }, 
        {
            "default" : 3.0
        }
    ]
}

更新:

向聚合管道添加了$match以匹配OP的尝试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM