给出像
这样的文件{
...
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}})
我错过了什么来使用一组数字?
答案 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版本,并且聚合查询可以正常工作。