Kay*_*lit 15 sorting nested mongodb
我正在寻找一种方法来对嵌套的对象数组进行排序.这是一个例子:
answers: [
{name: 'paul', state: 'RU'},
{name: 'steve', state: 'US'},
{name: 'mike', state: 'DE'},
...
]
Run Code Online (Sandbox Code Playgroud)
假设现在我要找到所有name的中,answers阵列,但在方兴未艾的顺序排序的话,我怎么能做到呢?
Eve*_*man 28
我会按照你想要它的顺序存储它.或者在客户端将其拉出后对其进行排序.
如果这些都不可能,您可以使用聚合框架:
> db.test.insert({answers: [
... {name: 'paul', state: 'RU'},
... {name: 'steve', state: 'US'},
... {name: 'mike', state: 'DE'}]});
> db.test.insert({answers: [
... {name: 'paul', state: 'RU'},
... {name: 'steve', state: 'US'},
... {name: 'xavier', state: 'TX'}]});
db.test.aggregate([
{$unwind: "$answers"},
{$sort: {"answers.name":1}},
{$group: {_id:"$_id", answers: {$push:"$answers"}}}
]);
Run Code Online (Sandbox Code Playgroud)
生产:
{
"result" : [
{
"_id" : ObjectId("5053b2477d820880c3469364"),
"answers" : [
{
"name" : "paul",
"state" : "RU"
},
{
"name" : "steve",
"state" : "US"
},
{
"name" : "xavier",
"state" : "TX"
}
]
},
{
"_id" : ObjectId("5053af9f7d820880c3469363"),
"answers" : [
{
"name" : "mike",
"state" : "DE"
},
{
"name" : "paul",
"state" : "RU"
},
{
"name" : "steve",
"state" : "US"
}
]
}
],
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
这在这种情况下可能没有帮助,但我想我会添加这个。您还可以选择在写入时对其进行排序,这对于您不必以多种方式排序的非规范化集合来说往往更好。
在为用户创建提要时,我在我的应用程序中发现了这种情况。
Meteor.users.helpers({
'addToFeed': function (gameId, pushData) {
check(pushData, FeedSchema);
Meteor.users.update({
_id: this._id,
"games.gameId": gameId
}, {
$push: {
"games.$.feed": {
$each: [pushData],
$sort: { timestamp: -1 }
}
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
我发现它非常方便,因为您可以使用find()它,并且默认情况下它将按照您的规格进行排序。
| 归档时间: |
|
| 查看次数: |
27304 次 |
| 最近记录: |