我需要以这种方式对我的收藏进行排序:
db.collection.find().sort({'stp.KEY1':1})
{ "_id" : ObjectId("5241eb2ed8b991543d931eee"), "stp" : [ { "KEY2" : 5 }, { "KEY1" : 500 } ] }
{ "_id" : ObjectId("521ef6e6d7b99105020cb0b9"), "stp" : [ { "KEY2" : 5 }, { "KEY1" : 1000 } ] }
{ "_id" : ObjectId("522dd25fd8b9912822498a62"), "stp" : [ { "KEY3" : 1000 }, { "KEY1" : 1000 } ] }
{ "_id" : ObjectId("5243fb6ed8b991641ef6a5b9"), "stp" : [ { "KEY1" : 300 } ] }
{ "_id" : ObjectId("5243fbb2d8b991651ea98477"), "stp" : [ { "KEY1" : 500 } ] }
{ "_id" : ObjectId("5245611bd7b991d87cb3ec3c"), "stp" : [ { "KEY1" : 1000 } ] }
有人为此做了秘密调料吗?
谢谢,
答案 0 :(得分:0)
目前,您无法通过子文档键对集合进行排序。发出命令时db.collection.find().sort({'stp.KEY1':1})
只会在stp
键上对其进行排序,而这不是您想要的。
所以你现在只有几个选择
db.coll.update(
{ _id : ID },
{
$push: {
stp: {
$each: [{ KEY1: 999}],
$sort: { KEY1: 1 }
}
}
})
这样,在任何更新后,您的子文档将被排序。然后,如果你检索它,你将不需要对它进行排序。