在 MongoDB 中更新多个字段的值
Update multiple fields' value in MongoDB
我是最近操作MongoDB的新手,但我真的需要更新像这样的一些字段..
db_name: test
table_name: info
{
"_id" : ObjectId("54bf9ab4f8eda6747567b122"),
"archives" : [
{
"evalution" : {
"positive" : 0,
"undefine" : 0,
"negative" : 0
},
"source" : ObjectId("54cb6f455decd8037528756b")
}
]
}
我想增加positive
和undefine
1
,如果evalution
没有不存在,
"evalution" : {
"positive" : 0,
"undefine" : 0,
"negative" : 0
}
应该添加到对象中。
不知道我表达清楚了没有,但我真的需要一些帮助..
如果评估不存在,您可以使用以下查询创建子文档。
db.test.update(
{_id:ObjectId("54bf9ab4f8eda6747567b122"),
"archives.source" : ObjectId("54cb6f455decd8037528756b"),
"archives.evalution":{$exists:false}},
{$set:{"archives.$.evalution":{positive:1,negative:0,undefine:1}}}
)
注意:位置运算符最多只能达到一级,因此在知道 archieves 数组的索引之前不能增加值。
您将获得档案数组的索引并使用以下命令递增。在这种情况下 0 其中
source = ObjectId("54cb6f455decd8037528756b")
db.test.update(
{_id:_id:ObjectId("54bf9ab4f8eda6747567b122")},
{$inc:{"archives.0.evalution.positive":1}}
)
了解更新的语义是什么会有所帮助。为什么要增加这两个字段?为什么要递增两个字段,就好像在进行计数,但如果字段不存在,您想要将默认值设置为 0
(而不是 1
)? “evaluation
不存在”和值
之间是否存在语义差异
{
"positive" : 0,
"undefine" : 0,
"negative" : 0
}
evaluation
?或者在“evaluation
不存在”和
之间
{
"positive" : -1,
"undefine" : -1,
"negative" : 0
}
为了价值?对于这些默认值中的至少一个,似乎没有,因此您应该设置 evaluation
以在插入文档或数组元素时具有适当的默认值。如果你这样做,你的更新很简单:
db.info.update(
{
"_id" : ObjectId("54bf9ab4f8eda6747567b122"),
"archives.source" : ObjectId("54cb6f455decd8037528756b")
},
{
"$inc" : {
"archives.$.evalution.positive" : 1,
"archives.$.evalution.undefine" : 1,
}
}
)
另外,我认为你有一些错别字:
evalution
可能意味着 evaluation
或者可能 evolution
?
-
positive
和 negative
的正确补充是 undefined
我是最近操作MongoDB的新手,但我真的需要更新像这样的一些字段..
db_name: test
table_name: info
{
"_id" : ObjectId("54bf9ab4f8eda6747567b122"),
"archives" : [
{
"evalution" : {
"positive" : 0,
"undefine" : 0,
"negative" : 0
},
"source" : ObjectId("54cb6f455decd8037528756b")
}
]
}
我想增加positive
和undefine
1
,如果evalution
没有不存在,
"evalution" : {
"positive" : 0,
"undefine" : 0,
"negative" : 0
}
应该添加到对象中。
不知道我表达清楚了没有,但我真的需要一些帮助..
如果评估不存在,您可以使用以下查询创建子文档。
db.test.update(
{_id:ObjectId("54bf9ab4f8eda6747567b122"),
"archives.source" : ObjectId("54cb6f455decd8037528756b"),
"archives.evalution":{$exists:false}},
{$set:{"archives.$.evalution":{positive:1,negative:0,undefine:1}}}
)
注意:位置运算符最多只能达到一级,因此在知道 archieves 数组的索引之前不能增加值。
您将获得档案数组的索引并使用以下命令递增。在这种情况下 0 其中 source = ObjectId("54cb6f455decd8037528756b")
db.test.update(
{_id:_id:ObjectId("54bf9ab4f8eda6747567b122")},
{$inc:{"archives.0.evalution.positive":1}}
)
了解更新的语义是什么会有所帮助。为什么要增加这两个字段?为什么要递增两个字段,就好像在进行计数,但如果字段不存在,您想要将默认值设置为 0
(而不是 1
)? “evaluation
不存在”和值
{
"positive" : 0,
"undefine" : 0,
"negative" : 0
}
evaluation
?或者在“evaluation
不存在”和
{
"positive" : -1,
"undefine" : -1,
"negative" : 0
}
为了价值?对于这些默认值中的至少一个,似乎没有,因此您应该设置 evaluation
以在插入文档或数组元素时具有适当的默认值。如果你这样做,你的更新很简单:
db.info.update(
{
"_id" : ObjectId("54bf9ab4f8eda6747567b122"),
"archives.source" : ObjectId("54cb6f455decd8037528756b")
},
{
"$inc" : {
"archives.$.evalution.positive" : 1,
"archives.$.evalution.undefine" : 1,
}
}
)
另外,我认为你有一些错别字:
evalution
可能意味着evaluation
或者可能evolution
?-
positive
和negative
的正确补充是undefined