gpt4 book ai didi

MongoDB 使用 $sort 更新 $push 到数组数组

转载 作者:可可西里 更新时间:2023-11-01 10:46:26 29 4
gpt4 key购买 nike

我有一个格式为:

{
"_id": "test",
"TestArr": [
[1, 2],
[2, 3],
[3, 4]
]
}

我想在“TestArr”数组中插入另一个数组,并同时按每个子数组中的第二项对其进行排序。

我已经确认我可以做到:

db.ArrayTest.update(
{ "_id" : "test" },
{
$push: {
"TestArr" : {
$each : [[6,3]],
$sort: 1
}
}
}
)

这导致文档:

{ 
"_id" : "test",
"TestArr" : [
[1.0, 7.0],
[2.0, 3.0],
[3.0, 4.0],
[6.0, 3.0]
]
}

我真正想要的是:

{ 
"_id" : "test",
"TestArr" : [
[2.0, 3.0],
[6.0, 3.0]
[3.0, 4.0],
[1.0, 7.0]
]
}

$sort : 1 在该更新中似乎正在对整个子数组进行排序。我知道在对文档数组进行排序时,我可以使用 $sort : { field: 1 } 指定特定的子字段进行排序。不确定如何使用子数组的特定项目索引指定排序。

感谢任何帮助。

最佳答案

这是使用您的示例数据创建的集合ArrayTest:

{
"_id" : "test",
"TestArr" : [
[ 1, 7 ],
[ 2, 3 ],
[ 3, 4 ]
]
}

输入聚合查询:

db.ArrayTest.aggregate([
{
$match : { "_id" : "test" }
},
{
$unwind : "$TestArr"
},
{
$sort : { "TestArr.1" : 1 }
},
{
$group:{
_id : "$_id",
TestArr : {$push:"$TestArr"}
}
}
])

这里我们首先使用 $unwind 阶段,然后使用 $sort 阶段根据其中的第二个元素对子数组进行排序。

输出:

{
"_id" : "test",
"TestArr" : [
[ 2, 3 ],
[ 3, 4 ],
[ 1, 7 ]
]
}

这是排序后的数组。

如果更新和排序可以分开进行,可以先插入新的子数组,然后使用该命令对它们进行排序。

请试试这个,如果有效请告诉我们!

关于MongoDB 使用 $sort 更新 $push 到数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51318206/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com