簡體   English   中英

MongoDB聚合管道並結合了深層嵌套的對象

[英]MongoDB Aggregation Pipeline and combining deeply nested objects

假設我有一個對象集合:

{
   _id : 1,
   list1 : [
      { name: 'This is my name', value: 'This is my value' },
      { name: 'name number 2', value: 'value number 2' }
   ],
   list2 : [
      { name: 'Another name', value: 'Another value' }
   ],
   deeper : {
      list3 : [
         { name: 'Another name but even deeper', value: 'Another value but deeper' }
      ]
   }
}

使用聚合管道,如何返回名稱/值對象的單個列表? 結果應為:

{
   _id : 1,
   combinedList : [
      { name: 'This is my name', value: 'This is my value' },
      { name: 'name number 2', value: 'value number 2' },
      { name: 'Another name', value: 'Another value' },
      { name: 'Another name but even deeper', value: 'Another value but deeper' }
   ]
}

第2部分:

現在,如何將整個集合中深層嵌套的對象扁平化為單個響應? 例:

{
   "_id" : 0,
   list1 : [
      { name: 'This is my name', value: 'This is my value' },
      { name: 'name number 2', value: 'value number 2' }
   ],
   list2 : [
      { name: 'Another name', value: 'Another value' }
   ]
},
{
   "_id" : 1,
   list1 : [
      { name: 'This is my name', value: 'This is my value' },
      { name: 'name number 2', value: 'value number 2' }
   ],
   deeper : {
      list2 : [
         { name: 'Another name but even deeper', value: 'Another value but deeper' }
      ]
   }
}

結果應與上面的文件相同(combinedList)。

您可以使用aggregatesetUnion

db.coll.aggregate([
    {
        $match:{_id:1}  
    },
     { 
         $project: {_id: 0 ,
                    combinedList: { $setUnion: [ "$deeper.list3","$list2", "$list1" ] }} 
     }
   ]
)

結果

{
    "result" : [ 
        {
            "combinedList" : [ 
                {
                    "name" : "Another name but even deeper",
                    "value" : "Another value but deeper"
                }, 
                {
                    "name" : "Another name",
                    "value" : "Another value"
                }, 
                {
                    "name" : "name number 2",
                    "value" : "value number 2"
                }, 
                {
                    "name" : "This is my name",
                    "value" : "This is my value"
                }
            ]
        }
    ],
    "ok" : 1
}

http://docs.mongodb.org/manual/reference/operator/aggregation/setUnion/

您必須使用2.6版。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM