我有一个这样的清单:
{
arr: [
{ _id: 'a', val: 1 },
{ _id: 'b', val: 4 },
{ _id: 'd', val: 0 },
{ _id: 'c', val: 8 }
]
}
我需要将元素{_id: c}
放在元素{_id: d}
之前。我怎么能用mongo做到这一点?当然,我可以将文档下载到我的服务器,准备它并将其上传到mongo服务器。但我认为,这不是一个好方法。
P.S:对不起,我需要移动元素(将其推到新位置并将其从旧位置移除)
答案 0 :(得分:0)
您可以使用关键字$position
指定要插入值的数组中的位置。在$push
元素开启时使用它,您就可以将该元素插入到数组中的特定位置。
db.collection.update(
{parameter: doc},
{$push: {
arr: {
$each: [{_id: "c", val: 8}],
$position: 2
}
})
这会将该对象推送到数组的第2位。如果您希望通过删除特定点处的对象来操纵数组,可以参考answer I linked in the comments。
答案 1 :(得分:0)
试试这个:
db.myCollection.find().forEach(function(doc){
db.myCollection.update({_id: doc._id},
{$set: {"arr.2": doc.arr[3], "arr.3": doc.arr[2]}})
})
OR
You can Pull and then push those documents