是否可以使用pymongo直接对mongodb子文档数组进行排序?

时间:2013-11-01 21:00:30

标签: python arrays mongodb sorting

我不需要对返回的文档(对象)进行排序,而是根据嵌套值对它们中的每一个进行排序。这是用pymongo.sort()做的事吗?

假设一个对象是:

{ //document data,
  array : [ {//subdocument data,
             "key" : 185},
             {//subdocument data,
             "key" : 186},
             {...}]
}

我尝试过以下哪项不起作用,但我搜索了一个简单的类似选项:

db.col.find().sort('array.key', pymongo.ASCENDING)

或者我应该用python排序吗?

for location in locations:
    data['array'] = sorted(data['array'], key=lambda x: x['key'])

1 个答案:

答案 0 :(得分:4)

很抱歉,目前Mongo无法做到这一点。

因此,您唯一的选择就是在您正在成功完成的应用程序层中对此进行排序。 请注意,如果您始终希望对结果进行排序,则可以使用$sort in your $push operator.来实现此目的。在您的情况下,您可以执行以下操作:

db.coll.update(
  { _id : ID },
  { 
     $push: {
       array: {
          $each: [{ key: 13}],
          $sort: { key: 1 }
       }
     }
  })

这样,在任何更新后,您的子文档将被排序。然后当你检索它时,你不需要对它进行排序。