我有一個這種格式的集合:
{
"place":"land",
"animal":"Tiger",
"name":"xxx"
},
{
"place":"land",
"animal":"Lion",
"name":"yyy"
}
我希望結果是這樣的:
{
"place":"land".
"animals":{"Lion":"yyy", "Tiger":"xxx"}
}
我寫了下面的查詢。我認為需要有另一個小組賽階段,但不能寫。
db.collection.aggregate({
'$group': {
'_id':{'place':'$place', 'animal':'$animal'},
'animalNames': {'$addToSet':'$name'}
}
})
需要進行哪些更改才能獲得所需的結果?
uj5u.com熱心網友回復:
$group- 分組animals。{ k: "animal", v: "name" }將具有型別的物件推入animals陣列。$project- 裝飾輸出檔案。通過將animals陣列轉換為鍵值對$arrayToObject。
db.collection.aggregate([
{
"$group": {
"_id": "$place",
"animals": {
"$push": {
k: "$animal",
v: "$name"
}
}
}
},
{
$project: {
_id: 0,
place: "$_id",
animals: {
"$arrayToObject": "$animals"
}
}
}
])
示例 Mongo Playground
uj5u.com熱心網友回復:
如果您的版本 >=4.4,一個合理的替代方法是使用$function運算子:
db.foo.aggregate([
{$project: {
'income_statement.annual': {
$function: {
body: function(arr) {
return arr.sort().reverse();
},
args: [ "$income_statement.annual" ],
lang: "js"
}}
}}
]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/453624.html
上一篇:如何查詢嵌套陣列mongodb
