在MongoDB中推送分层数组

时间:2016-06-04 19:07:03

标签: arrays mongodb mongodb-query

我有以下文件:

{
  "_id":"575322d9585095d9929554ba",
  "Level1":{
    "Level2":[
      {
        "Level3a":{
          "Level4":{
            "Level5":{
              "name":"John",
              "surname":"Matthew"
            }
          }
        }
      },
      {
        "Level3a":{
          "Level4":{
            "Level5":{
              "name":"Emma",
              "surname":"Jackson"
            }
          }
        }
      }
    ]
  }
}

我需要在Level5插入新的名字和姓氏。我尝试了$ push方法,但是我得到了虚线字段..对于存储无效的错误:

db.names.update({ "_id":"575322d9585095d9929554ba" },
   {
     $push: {
      "Level1.Level2":
       { $each: [ { "Level3a.Level4.Level5.name": "Greg" },
                  { "Level3a.Level4.Level5.surname": "Cook" }] } } } )

似乎push不允许在分层数组中插入新数据或者我错了?

1 个答案:

答案 0 :(得分:0)

您的查询存在问题,因为$each用于向同一个数组添加多个值....

由于我们只向数组添加一个条目,因此我们不需要使用$each 所以查询看起来像这样:

db.vnenad.update({
    "_id" : "575322d9585095d9929554ba"
},
    {
    $push : {
        "Level1.Level2" : {
            "Level3a" : {
                "Level4" : {
                    "Level5" : {
                        "name" : "johnny",
                        "surname" : "rambo"
                    }
                }
            }
        }
    }
})

因为我正在对您的查询进行调整,所以我决定使用文档创建变量以插入数组,然后我更容易调整您的查询 - 请参阅下面的内容:

var doc = {
    "Level3a" : {
        "Level4" : {
            "Level5" : {
                "name" : "johnny",
                "surname" : "rambo"
            }
        }
    }
}

db.vnenad.update({
    "_id" : "575322d9585095d9929554ba"
},
    {
    $push : {
        "Level1.Level2" : doc
    }
})