更新mongodb数据库中的json文档

更新mongodb数据库中的json文档,mongodb,Mongodb,我正在尝试更新MongoDb中的现有文档。如果您想在第一级更新或添加键/值对,有许多解释如何做到这一点。但在我的用例中,我需要使用第一个updateOne(设置了upsert选项)创建一个具有以下结构的文档: { "_id" : "1234", "raw" : { "meas" : { "meas1" : { "data" : "blabla" } } } } 在第二个命令中,我需要在同一个文档中,在“meas1”级别添加一

我正在尝试更新MongoDb中的现有文档。如果您想在第一级更新或添加键/值对,有许多解释如何做到这一点。但在我的用例中,我需要使用第一个
updateOne
(设置了upsert选项)创建一个具有以下结构的文档:

{
  "_id" : "1234", 
  "raw" : {
    "meas" : {
      "meas1" : {
        "data" : "blabla"
      }
    }
  }
}
在第二个命令中,我需要在同一个文档中,在
“meas1”
级别添加一个
“meas2”
字段。我期望的输出是:

{
  "_id" : "1234", 
  "raw" : {
    "meas" : {
      "meas1" : {
        "data" : "blabla"
      },
      "meas2" : {
        "data" : "foo"
      }
    }
  }
}
我玩过这样的语句

updateOne({"_id":"1234"},{$set:{"raw":{"meas":{"meas2":{"data":"foo"}}}}}, {"upsert":true})

还有
$push
,这两个变量都是
插入的
——这里只有文档,也有
插入通
,但没有产生所需的输出。有没有一个MongoDb专家可以给你一个提示。。。我确信这个功能存在。。。提前谢谢

当你更新
{$set:{“raw”:{“meas”:{“meas2”:{“data”:“foo”}}}}
时,你并没有将
“mesa2”
添加到
“meas”
中,而是完全过度使用了
“raw”

要更改/添加文档中的一个字段,请使用


您需要的命令是
updateOne({“\u id”:“1234”},{$set:{“raw.meas.mesa2”:{“data”:“foo”}},{“upsert”:“true”})

您需要首先理解以下概念

在嵌入文档中设置字段,并在

对于您的问题,只需查看mongo shell上的以下执行:

> db.st4.insert({
...   "_id" : "1234", 
...   "raw" : {
...     "meas" : {
...       "meas1" : {
...         "data" : "blabla"
...       }
...     }
...   }
... })
WriteResult({ "nInserted" : 1 })
> db.st4.find()
{ "_id" : "1234", "raw" : { "meas" : { "meas1" : { "data" : "blabla" } } } }
> 
> // Below query will replace the raw document with {"meas":{"meas2":{"data":"foo"}}}, will not add 
> //db.st4.updateOne({"_id":"1234"},{$set:{"raw":{"meas":{"meas2":{"data":"foo"}}}}}, {"upsert":true})
>// By using the dot operator, you actually write the values inside the documents i.e you are replacing or adding at raw.meas.mesa2 i.e inside the document of mesa2. 
> db.st4.updateOne({"_id":"1234"},{$set: {"raw.meas.mesa2": { "data" : "foo" }}}, {"upsert":"true"})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.st4.find().pretty()
{
    "_id" : "1234",
    "raw" : {
        "meas" : {
            "meas1" : {
                "data" : "blabla"
            },
            "mesa2" : {
                "data" : "foo"
            }
        }
    }
}
> 

很高兴听到它的帮助。请考虑把它标记为你的问题的答案。