MongoDBコレクションに深くネストされたコレクションがあります。
次のクエリを実行すると:
db.countries.findOne({},{'data.country.neighbor.name':1,'_id':0})
私はここでこのネストされた結果になります:
{"data" : {
"country" : [
{
"neighbor" : [
{
"name" : "Austria"
},
{
"name" : "Switzerland"
}
]
},
{
"neighbor" : {
"name" : "Malaysia"
}
},
{
"neighbor" : [
{
"name" : "Costa Rica"
},
{
"name" : "Colombia"
}
]
}
]
}}
今、これは私が欲しいものです:
['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']
またはこれ:
{'name':['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']}
または類似した何か...これは可能ですか?
集計 フレームワークの$project
&$unwind
&$group
を使用して、要件に近い結果を得ることができます。
> db.countries.aggregate({$project:{a:'$data.country.neighbor.name'}},
{$unwind:'$a'},
{$unwind:'$a'},
{$group:{_id:'a',res:{$addToSet:'$a'}}})
{
"result" : [
{
"_id" : "a",
"res" : [
"Colombia",
"Malaysia",
"Switzerland",
"Costa Rica",
"Austria"
]
}
],
"ok" : 1
}
名前配列が深くネストされているため、$unwind
が2回使用されています。そして、neighbor
属性が配列の場合にのみ機能します。あなたの例では、1つの隣接フィールド(マレーシア)は配列ではありません
もっと簡単な方法で、最近のことかもしれません
db.countries.aggregate({$unwind:'$data.country.neighbor.name'})