![](/img/trans.png)
[英]How To Count Values Inside Deeply Nested Array Of Objects in Mongodb Aggregation
[英]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)。
您可以使用aggregate
和setUnion
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.