我有一个格式为
的文档{
"_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}指定用于排序的特定子字段。不确定如何使用子数组的特定项目索引指定排序。
感谢任何帮助。
答案 0 :(得分:0)
这是使用您的示例数据创建的集合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 ]
]
}
这是排序后的数组。
如果可以单独完成更新和排序,则可以先插入新的子数组,然后使用此命令对其进行排序。
请尝试一下,让我们知道它是否有效!