這是我的示例資料:
[
{ name: "bob",number:20 },
{ name: "bob",number:10 },
{ name: "kol",number:20 },
{ name: "bob",number:20 }
{ name: "kol",number:10 },
{ name: "kol",number:10 }
]
我想為每個名稱獲取一個檔案,其中包含一組排序的唯一數字。預期輸出:
[
{
name:"bob",
number: [10,20] // with sort, not 20,10
},
{
name:"kol",
number: [10,20]
}
]
我嘗試了這樣的事情,但沒有按我的意愿作業。我沒有得到排序的數字陣列。
user.aggregate([
{
$group: {
_id: '$name',
name: { $first: '$name' },
number: {$addToSet: '$number'}
}
},
{$sort: {name: 1}}
])
uj5u.com熱心網友回復:
您只需要$sort
在您之前$group
使用名稱并使用$push
以保留所有數字,而不是$addToSet
. 為了保留一組數字,僅用于$setIntersection
洗掉重復項:
db.collection.aggregate([
{$sort: {number: 1}},
{
$group: {
_id: "$name",
number: {$push: "$number"}
}
},
{
$project: {
name: "$_id",
number: {$setIntersection: ["$number"]},
_id: 0
}
},
{$sort: {name: 1}}
])
看看它在操場上的例子是如何作業的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/490200.html
上一篇:使用默認值計算用戶的帖子