如何对 MongoDB 中的嵌套数组进行排序?
How to sort nested array in MongoDB?
Mongo游乐场link:https://mongoplayground.net/p/BGtxQEBAvZh
我有一个数组字段“opcoes”,我想按日期排序 dt
。目前它是未排序的,例如
{
"_id" : "w900c9b5a-666f-4857-92da-0b9c273dca40",
"opcoes" : [
{
"dt" : ISODate("2021-11-16T11:17:55.386-03:00"),
"text" : "2"
},
{
"dt" : ISODate("2021-11-16T11:17:29.709-03:00"),
"text" : "3"
}
]
}
预期结果是:
{
"_id" : "w900c9b5a-666f-4857-92da-0b9c273dca40",
"opcoes" : [
{
"dt" : ISODate("2021-11-16T11:17:29.709-03:00") ,
"text" : "3"
},
{
"dt" : , ISODate("2021-11-16T11:17:55.386-03:00")
"text" : "2"
}
]
}
你能帮帮我吗?我试图使用 $SortArray
但它无法识别它。我得到“ Invalid $project :: caused by :: Unknown expression $sortArray ”。
我使用 $push
创建了数组:
{
$group: {
_id: "$chat_key",
opcoes: {
$push: {
text: "$text",
dt: "$dt"
}
}
}
}
是否有在 $push
中排序的选项?
谢谢
$sortArray
适用于 mongoDB version 5.2 及更高版本,如果出现此错误,您可能使用的是旧版本。
无论您的版本如何,最好的方法是在 $push
:
之前 $sort
db.collection.aggregate([
{
$sort: {dt: 1}
},
{
$group: {
_id: "$chat_key",
opcoes: {$push: {text: "$text", dt: "$dt"}}
}
])
如果你已经有了一个数组(而且你无法控制push操作),并且你的版本低于5.2,你可以$unwind
:
db.collection.aggregate([
{
$unwind: "$opcoes"
},
{
$sort: {dt: 1}
},
{
$group: {
_id: "$_id",
opcoes: {
$push: {dt: "$opcoes.dt", text: "$opcoes.text"}
}
}
}
])
Mongo游乐场link:https://mongoplayground.net/p/BGtxQEBAvZh
我有一个数组字段“opcoes”,我想按日期排序 dt
。目前它是未排序的,例如
{
"_id" : "w900c9b5a-666f-4857-92da-0b9c273dca40",
"opcoes" : [
{
"dt" : ISODate("2021-11-16T11:17:55.386-03:00"),
"text" : "2"
},
{
"dt" : ISODate("2021-11-16T11:17:29.709-03:00"),
"text" : "3"
}
]
}
预期结果是:
{
"_id" : "w900c9b5a-666f-4857-92da-0b9c273dca40",
"opcoes" : [
{
"dt" : ISODate("2021-11-16T11:17:29.709-03:00") ,
"text" : "3"
},
{
"dt" : , ISODate("2021-11-16T11:17:55.386-03:00")
"text" : "2"
}
]
}
你能帮帮我吗?我试图使用 $SortArray
但它无法识别它。我得到“ Invalid $project :: caused by :: Unknown expression $sortArray ”。
我使用 $push
创建了数组:
{
$group: {
_id: "$chat_key",
opcoes: {
$push: {
text: "$text",
dt: "$dt"
}
}
}
}
是否有在 $push
中排序的选项?
谢谢
$sortArray
适用于 mongoDB version 5.2 及更高版本,如果出现此错误,您可能使用的是旧版本。
无论您的版本如何,最好的方法是在 $push
:
$sort
db.collection.aggregate([
{
$sort: {dt: 1}
},
{
$group: {
_id: "$chat_key",
opcoes: {$push: {text: "$text", dt: "$dt"}}
}
])
如果你已经有了一个数组(而且你无法控制push操作),并且你的版本低于5.2,你可以$unwind
:
db.collection.aggregate([
{
$unwind: "$opcoes"
},
{
$sort: {dt: 1}
},
{
$group: {
_id: "$_id",
opcoes: {
$push: {dt: "$opcoes.dt", text: "$opcoes.text"}
}
}
}
])