在嵌入式阵列中添加新文件并更新现有文档

时间:2014-12-02 18:14:55

标签: mongodb mongodb-query

有没有办法在嵌入式阵列中添加或删除文档,以及更新现有文档 在嵌入式数组中?

e.g。给定

{
    "_id" : ObjectId("547dd21f6e04d152fccedf1b"),
    "intF" : 0,
    "arrayD" : [ 
        {
            "name" : "baz",
            "contents" : "baz contents"
        }
}

试图

db.dummy.update(
    // query 
    {
        "_id" : ObjectId("547dd21f6e04d152fccedf1b")
    },

    // update 
    {
         $set : { "arrayD.0.contents": "no contents" },
         $push : { arrayD : { $each : [ { name : "bam", contents : null } ] }
                 }
    },

    // options 
    {
        "multi" : false,  // update only one document 
        "upsert" : false  // insert a new document, if no existing document match the query 
    }
);

给出错误

无法同时更新'arrayD.0.contents'和'arrayD'

我看到的选项是

  1. 使用$ set并编写整个数组
  2. 使用多个更新,一个用于$ set来修改现有条目,一个用于$ push / $ pull来添加/删除条目。
  3. 有更好的方法吗?

0 个答案:

没有答案