MongoDB:按数组索引排序

时间:2015-03-28 00:46:32

标签: arrays mongodb sorting

我有一个包含数组列表的数组字段的文档,我想按数组中的第一个元素排序。

{
   field1 : "bla",
   field2 : "bla",
   field3 : "bla",
   someArray : [123, 456, 789]
}

我试图像这样查询:

db.testCollection.find({}).sort({"someArray[0]" : 1})

但这似乎没有任何影响,排序会被忽略。

有什么办法可以做到吗?

2 个答案:

答案 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()