如何移动MongoDB数组中的项?

时间:2013-06-12 20:44:44

标签: jquery-ui mongodb

有没有办法更新文档数组以将项目从一个索引移动到另一个索引? 例如

{
   name: "myDoc",
   items: ["it1", "it2", "it3"]
}

作为JQuery-UI Sortable事件的结果,it2和it3切换了位置。因此,我想更新它们在myDoc中的位置,该位置存储在MongoDB中。

2 个答案:

答案 0 :(得分:1)

目前,没有办法在任何驱动程序的mongodb中直接执行此操作。

您需要在应用程序中执行此操作并使用mongo设置数组。

前:

var new_array = ["it2","it1","it3"];//Do your sort/place in js

$mongo_connexion->update({"name": "myDoc"}, {$set: {"items" : new_array}});

答案 1 :(得分:1)

这是将元素移动到新位置的另一种方法,它将交换it2和it3的位置......

  1. 使用$ pull [ Docs Here ]从数组中删除元素。

    update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
    
  2. 使用$ push将元素插入新位置。 [ Docs Here ]

    update({"name": "myDoc"}, { 
        $push: { 
            "items" : { $each : [ "it3" ], $position : 1 }
        }
    });
    
  3. 何时使用

    Pouzor使用$ set的答案可能更简单,并且在许多用例中表现更好。

    但是,如果多个用户同时添加,删除和重新排序数组项,则此方法意味着您不会覆盖彼此的更改。

    在某些情况下(例如大型数组元素)也可能更有效,因为写入的数据更少。

    GOTCHA:列表清单

    如果您要重新排序的列表是一个数组数组,则需要使用$ all运算符和$ pull [ Docs Here ]

    举个例子:

    {
        name: "myDoc",
        items: [  
            [ "User", "dofij20r91dj93" ],   
            [ "User", "239vjvidjfsldf" ], 
            [ "User", "2309jvdsjdkk23" ]
        ]
    }
    

    以下是从列表列表中删除第一个列表的代码:

    update({"name": "myDoc"}, {
        $pull: {
            "items" : {
                $all : [ "User", "dofij20r91dj93" ]  // the sub-list to $pull
            }
        }
    });
    

    对象列表

    这很容易。假设您有以下对象列表:

    {
        name: "myDoc",
        items: [  
            { type: "User",  id: "dofij20r91dj93", name: "Dave" },   
            { type: "Group", id: "239vjvidjfsldf", name: "Accountants" }, 
            { type: "User",  id: "2309jvdsjdkk23", name: "Toni" }
        ]
    }
    

    你可以像这样拉:

    update({"name": "myDoc"}, {
        $pull: { 
            "items" : { type: "User", id: "dofij20r91dj93" } 
        }
    });