MongoDB:按数组索引排序

7z5jn7bk  于 2022-12-03  发布在  Go
关注(0)|答案(3)|浏览(175)

我有一个文档,其中的数组字段包含一个值列表,我希望按数组中的第一个元素进行排序。

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

我当时试图这样查询:

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

但这似乎没有任何影响,排序被忽略。
有什么办法可以做到这一点?

z2acfund

z2acfund1#

是的,按照someArray的第一个元素按升序对集合进行排序的方法是:

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

这里不需要聚合框架。你已经很接近了!

wfveoks0

wfveoks02#

这在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()

dldeef67

dldeef673#

它不是忽略升序排序,而是根据each数组中的最小值进行排序。

相关问题