更新mongodb数据库中的json文档
我正在尝试更新MongoDb中的现有文档。如果您想在第一级更新或添加键/值对,有许多解释如何做到这一点。但在我的用例中,我需要使用第一个更新mongodb数据库中的json文档,mongodb,Mongodb,我正在尝试更新MongoDb中的现有文档。如果您想在第一级更新或添加键/值对,有许多解释如何做到这一点。但在我的用例中,我需要使用第一个updateOne(设置了upsert选项)创建一个具有以下结构的文档: { "_id" : "1234", "raw" : { "meas" : { "meas1" : { "data" : "blabla" } } } } 在第二个命令中,我需要在同一个文档中,在“meas1”级别添加一
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"
}
}
}
}
>
很高兴听到它的帮助。请考虑把它标记为你的问题的答案。