【问题标题】:MongoDB: Sort by array indexMongoDB:按数组索引排序
【发布时间】:2015-03-28 00:46:31
【问题描述】:

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

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

我试图这样查询:

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

但这似乎没有任何效果,并且排序被忽略了。

有什么办法可以做到吗?

【问题讨论】:

    标签: arrays mongodb sorting


    【解决方案1】:

    是的,按someArray 的第一个元素以升序对您的收藏进行排序的方法是:

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

    这里不需要聚合框架。你很亲密!

    【讨论】:

    【解决方案2】:

    这件事在直接 mongo find 查询中是不可能的,所以你应该使用下面的 mongo 聚合

    db.collectionName.aggregate({"$unwind":"$someArray"},{"$sort":{"someArray":-1}})
    

    但是上面的聚合需要太多的递归,因为它会导致性能问题。所以我认为应该可以按排序顺序更新someArray,然后使用findquery,以便它以someArray 的排序方式显示结果。下面查询更新someArray

    db.collectionName.update({},{"$push":{"someArray":{"$each":[],"$sort":-1}}},false,true)
    

    last true 用于更新多个文档。更新完成后,简单查找查询为db.collectionName.find().pretty()

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 1970-01-01
      • 2017-11-01
      • 2012-11-07
      • 1970-01-01
      • 2022-12-16
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多