我不需要对返回的文档(对象)进行排序,而是根据嵌套值对它们中的每一个进行排序。这是用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'])
答案 0 :(得分:4)
很抱歉,目前Mongo无法做到这一点。
因此,您唯一的选择就是在您正在成功完成的应用程序层中对此进行排序。 请注意,如果您始终希望对结果进行排序,则可以使用$sort in your $push operator.来实现此目的。在您的情况下,您可以执行以下操作:
db.coll.update(
{ _id : ID },
{
$push: {
array: {
$each: [{ key: 13}],
$sort: { key: 1 }
}
}
})
这样,在任何更新后,您的子文档将被排序。然后当你检索它时,你不需要对它进行排序。