获取数组并排序 Mongodb
Get And Sort In Array Mongodb
我有这样的文档
{
"id": "1",
"myarray": [
{
"_id": "4",
"name": "d",
"order": 4
},
{
"_id": "1",
"name": "a",
"order": 1
},
{
"_id": "2",
"name": "b",
"order": 2
}
]
}
我想在从数据库获取时按顺序查看数组中的数据
我正在尝试如下所示的一些查询,但它似乎不正常并且没有任何改变
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([
{ "$match": { "_id": 1 } },
{ "$unwind": "$myarray" },
{ "$sort": { "myarray.order": 1 } },
{ "$group": {
"_id": "$_id",
"myarray": { "$push": "$myarray" }
}}
])
要永久改变:
db.collection.update(
{ "_id": 1 },
{ "$push": { "myarray": { "$each": [], "sort": { "order": 1 } } }},
{ "multi": true }
)
如果这是您通常想要的,那么最好的选择通常是 $sort
the array as you $push
a new element or elements via $each
作为另一个修饰符。
当然,如果您 $pull
数组中的元素,"current" 语法需要发出另一个查询才能对数组进行排序,就像已经显示的那样。
通常情况下,最好让结果按预期的顺序排列,而不是在 post 处理中对它们进行排序,因为后者的成本总是高于前一种方法。
我有这样的文档
{
"id": "1",
"myarray": [
{
"_id": "4",
"name": "d",
"order": 4
},
{
"_id": "1",
"name": "a",
"order": 1
},
{
"_id": "2",
"name": "b",
"order": 2
}
]
}
我想在从数据库获取时按顺序查看数组中的数据 我正在尝试如下所示的一些查询,但它似乎不正常并且没有任何改变
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([
{ "$match": { "_id": 1 } },
{ "$unwind": "$myarray" },
{ "$sort": { "myarray.order": 1 } },
{ "$group": {
"_id": "$_id",
"myarray": { "$push": "$myarray" }
}}
])
要永久改变:
db.collection.update(
{ "_id": 1 },
{ "$push": { "myarray": { "$each": [], "sort": { "order": 1 } } }},
{ "multi": true }
)
如果这是您通常想要的,那么最好的选择通常是 $sort
the array as you $push
a new element or elements via $each
作为另一个修饰符。
当然,如果您 $pull
数组中的元素,"current" 语法需要发出另一个查询才能对数组进行排序,就像已经显示的那样。
通常情况下,最好让结果按预期的顺序排列,而不是在 post 处理中对它们进行排序,因为后者的成本总是高于前一种方法。