数组上的Mongodb聚合排序主要

时间:2015-06-09 19:38:42

标签: mongodb

给出像

这样的文件
{
   ...
   name:'whatever',
   games: [122, 199, 201, 222]
}

db.col.aggregate({$match:{}},
    {$sort:{'games.0': -1}})

没有排序......没有错误......它只是没有对游戏阵列的第一个数组元素进行排序。

尽管具有相同语法的查询可以正常工作

col.find({}).sort({'games.0':-1}) 

如果我更改了集合,那么游戏就是像

这样的对象数组
   [ {game1:198}, {game2:201} ...]

然后聚合使用

{$sort:{'games.game1': -1}})

我错过了什么来使用一组数字?

3 个答案:

答案 0 :(得分:0)

首先在阵列上应用 $unwind 运算符首先展开数组,然后在解构数组上使用 $sort ,最后使用< strong> $group 以获取原始文档结构:

db.coll.aggregate([
    {"$unwind": "$games"},
    {"$sort": {"games": 1}},
    {
        "$group": {
            "_id": "$_id",
            "name": {"$first": "$name"},
            "games": {"$push": "$games"}
        }
    }
])

答案 1 :(得分:0)

尝试

db.coll.aggregate([
    {"$unwind": "$games"},
    {"$sort": {"games": -1}}
]}

我希望这会如您所愿。

答案 2 :(得分:0)

在mongo 3.4中,找到排序,即db.col.find({}).sort({'games.0':-1})可以正常工作,而聚合排序却不能。

在mongo 3.6中,查找和聚合排序均按预期工作。

吉拉问题:https://jira.mongodb.org/browse/SERVER-19402

我建议您更新mongo版本,并且聚合查询可以正常工作。

相关问题