簡體   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