将数组元素从一个数组位置移动到另一个数组位置(mongo)

时间:2016-06-17 12:28:57

标签: arrays node.js mongodb

我有一个这样的清单:

{ 
    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:对不起,我需要移动元素(将其推到新位置并将其从旧位置移除)

2 个答案:

答案 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