mongodb - MongoDB 使用 $sort 更新 $push 到数组数组
问题描述
我有一份格式为:
{
"_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
stage ,然后使用 stage$sort
按其中的第二个元素对子数组进行排序。
输出 :
{
"_id" : "test",
"TestArr" : [
[ 2, 3 ],
[ 3, 4 ],
[ 1, 7 ]
]
}
这是排序后的数组。
如果更新和排序可以单独进行,您可以先插入新的子数组,然后使用该命令对其进行排序。
请试试这个,让我们知道它是否有效!
推荐阅读
- jquery - jQuery:在通过 AJAX 为 Chosen JS 添加新选项之前删除未选择的选项
- python - 如何使用pydub?
- junit5 - 具有 jupiter-vintage-engine 规则的 Junit 5 Launcher 不支持 JUnit4 @ParametrizedTest
- r - R:ggplot2 直方图填充闪避 - 防止部分重叠
- ssl - Kubernetes 1.14.2 HA Master NGINX 负载均衡器 log.go:172] http:来自 192.168.5.32:43148 的 TLS 握手错误:远程错误:tls:证书错误
- spring-data-jpa - Spring-Data-JPA - 如何删除 OneToMany 关系中的子记录
- bash - bash 和 zsh 中的便携式数组索引
- usb - 仅基于 DESCRIPTOR HID 报告访问 USB 设备数据
- pandas - 如何使用额外的百分位数自定义熊猫盒和胡须图?
- python - 生成带有日期的随机时间序列数据