Mongo DB-将Json对象添加到现有文档而不创建新条目(不是数组)

时间:2016-03-07 06:26:45

标签: json mongodb

我的mongodb中有一个已插入的Json对象。

 {
    "appname":"abcd",
    "appId":"E3456",
    "modules":{
      "sales":{
         "apis":{
            "get all sales":{
               "method":"get",
               "access_ctrl_level":"admin",
               "req_fields":[

               ],
               "url":"url_to_api",
               "error_code":[
                  {
                     "code":502,
                     "desc":"no authentication"
                  }
               ]
            }
         }
      }
  }
}

现在我想在" sales.apis"中添加另一个对象。

 "get sales details":{
               "method":"get",
               "access_ctrl_level":"admin",
               "req_fields":[
                  "saleNo"
               ],
               "url":"url",
               "error_code":[
                  {
                     "code":502,
                     "desc":"no authentication"
                  }
               ]
            }

我使用下面的代码来查找和修改文档以将此新对象插入集合

db.MetaData.findAndModify({query: { $and:[{modules:{sales:{apis:{"get all sales":{method:"get"}}}}},{"appname":"erp"}] },
    update: {$set:{modules:{sales:{apis:{"get sales details":{method:"post","access_ctrl_level":"admin","url":"url"}}}}}},
    upsert: true
})

但这是在MetaData文档中创建新条目。但我想在" modules.apis.get销售详细信息"下插入此内容。在同一份文件中 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

请尝试通过dot notation

进行操作
  

要使用dot-notation访问嵌入文档的字段,请将嵌入的文档名称与dot (.)和字段名称连接起来,并用引号括起来:

findAndModify({
        query: { "modules.sales.apis.get all sales.method":"get", 
                 "appname":"erp"} ,
        update: {
               $set:{"modules.sales.apis.get sales details": 
                    {"method":"post",
                     "access_ctrl_level":"admin",
                     "url":"url"}}},
        upsert: true
})  

答案 1 :(得分:0)

正如我在您的查询中看到的,您键入了错误的appName,我认为您的意思是&abc'而不是' erp'。

.findAndModify(
{
  "query": {
    "modules.sales.apis.get all sales.method": "get",
    "appname": "abcd"
  },
  "update": {
    "$set": {
      "modules.sales.apis.get sales details": {
        "method": "post",
        "access_ctrl_level": "admin",
        "url": "url"
      }
    }
  },
  "upsert": true
}
)