在数组Mongodb中获取和排序

在数组Mongodb中获取和排序,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有这样的文件 { "id": "1", "myarray": [ { "_id": "4", "name": "d", "order": 4 }, { "_id": "1", "name": "a", "order": 1 }, {

我有这样的文件

{
    "id": "1",
    "myarray": [
        {
            "_id": "4",
            "name": "d",
            "order": 4
        },
        {
            "_id": "1",
            "name": "a",
            "order": 1
        },
        {
            "_id": "2",
            "name": "b",
            "order": 2
        }
    ]
}
我想在从db获取数据时看到按顺序对数组中的数据进行排序 我正在尝试一些如下的查询,但它似乎不好,没有任何改变

 db.collection.aggregate([{$unwind: "$myarray"},{$project: {orders:"$myarray.order"}},{$group: {_id:"$_id",min:{$min: "$orders"}}},{$sort: {min:1}}])

db.myarray.find({},{$sort:{"myarray.order":-1}})
db.collection.find({"_id":"1"}).sort({"myarray.order":1})
什么是正确的查询

我需要这样的东西

db.collection.find({"_id":"1"}).sort({"myarray.order":1})

您可以使用聚合管道

db.collection.aggregate([
    { "$unwind": "$myarray" }, 
    { "$sort": { "myarray.order": 1 }}, 
    { "$group": { "_id": "$_id", "myarray": { "$push": "$myarray" }}}
])

您可以使用聚合管道

db.collection.aggregate([
    { "$unwind": "$myarray" }, 
    { "$sort": { "myarray.order": 1 }}, 
    { "$group": { "_id": "$_id", "myarray": { "$push": "$myarray" }}}
])

要在响应中排序而不是永久排序,请执行以下操作:

db.collection.aggregate([
{“$match”:{“\u id”:1}},
{“$unwind”:“$myarray”},
{“$sort”:{“myarray.order”:1},
{“$组”:{
“\u id”:“$\u id”,
“myarray”:{“$push”:“$myarray”}
}}
])
永久改变:

db.collection.update(
{u id:1},
{“$push”:{“myarray”:{“$each”:[],“sort”:{“order”:1}}},
{“多”:真}
)
如果这是您通常想要的,那么最好的选择通常是将数组作为一个新元素或元素作为另一个修饰符

当然,如果从数组中删除元素,“current”语法要求发出另一个查询,以便对数组进行排序,正如已经显示的那样


通常情况下,最好将结果按您期望的顺序排序,而不是在后处理中排序,因为后处理的成本总是高于前一种方法。

要在响应中排序而不是永久排序,请执行以下操作:

db.collection.aggregate([
{“$match”:{“\u id”:1}},
{“$unwind”:“$myarray”},
{“$sort”:{“myarray.order”:1},
{“$组”:{
“\u id”:“$\u id”,
“myarray”:{“$push”:“$myarray”}
}}
])
永久改变:

db.collection.update(
{u id:1},
{“$push”:{“myarray”:{“$each”:[],“sort”:{“order”:1}}},
{“多”:真}
)
如果这是您通常想要的,那么最好的选择通常是将数组作为一个新元素或元素作为另一个修饰符

当然,如果从数组中删除元素,“current”语法要求发出另一个查询,以便对数组进行排序,正如已经显示的那样


通常情况下,最好按照您期望的顺序保存结果,而不是在后处理中对结果进行排序,因为后处理的成本总是高于前一种方法。

很抱歉,这是db.myarray.find().sort({order:1})对于此类查询,效果很好,为什么不尝试
db.collection.aggregate({$unwind:'$myarray'},{$sort:{'myarray.order':-1}})
?对不起,这是db.myarray.find().sort({order:1})这种查询很好用,为什么不试试
db.collection.aggregate({$unwind:'$myarray'},{$sort:{'myarray.order':-1})
?可以,但我需要获取id为1的文档并对其数组进行排序data@user298582这不是问题,请参阅编辑后的信息。我看到的真正问题是做出决定,要么保持数组排序,要么根据请求进行排序。除非您一直更改排序模式,否则前者是有意义的。这是可以的,但我需要去做id为1的文档并对其数组进行排序data@user298582这不是问题,请参阅编辑后的信息。我认为真正的问题是决定要么保持数组排序,要么根据请求进行排序。除非您一直更改排序模式,否则前者是有意义的。