我有一个包含数组列表的数组字段的文档,我想按数组中的第一个元素排序。
{
field1 : "bla",
field2 : "bla",
field3 : "bla",
someArray : [123, 456, 789]
}
我试图像这样查询:
db.testCollection.find({}).sort({"someArray[0]" : 1})
但这似乎没有任何影响,排序会被忽略。
有什么办法可以做到吗?
答案 0 :(得分:6)
是的,按someArray
的第一个元素按递增顺序对集合进行排序的方法是:
db.testCollection.find().sort({"someArray.0": 1})
这里不需要聚合框架。你非常接近!
答案 1 :(得分:0)
这个问题在mongo find
查询中是不可能的,所以你应该使用mongo聚合,如下所示
db.collectionName.aggregate({"$unwind":"$someArray"},{"$sort":{"someArray":-1}})
但上面的聚合需要太多的递归,因为它会导致性能问题。所以我认为应该在排序顺序中更新someArray
然后使用find
查询,以便以排序方式显示someArray
中的结果。查询更新someArray
db.collectionName.update({},{"$push":{"someArray":{"$each":[],"$sort":-1}}},false,true)
最后true
用于更新多个文档。更新完成后,简单查找查询db.collectionName.find().pretty()