我是最近操纵MongoDB的新手,但我真的需要更新这些字段......
db_name: test
table_name: info
{
"_id" : ObjectId("54bf9ab4f8eda6747567b122"),
"archives" : [
{
"evalution" : {
"positive" : 0,
"undefine" : 0,
"negative" : 0
},
"source" : ObjectId("54cb6f455decd8037528756b")
}
]
}
我想{strong}增加 positive
和undefine
1
,如果evalution
不存在 ,
"evalution" : {
"positive" : 0,
"undefine" : 0,
"negative" : 0
}
应添加到对象中。
我不知道我是否表达清楚,但我真的需要一些帮助......
答案 0 :(得分:2)
如果评估不存在,您可以使用以下查询创建子文档。
db.test.update(
{_id:ObjectId("54bf9ab4f8eda6747567b122"),
"archives.source" : ObjectId("54cb6f455decd8037528756b"),
"archives.evalution":{$exists:false}},
{$set:{"archives.$.evalution":{positive:1,negative:0,undefine:1}}}
)
注意:位置运算符最多只能达到一个级别,因此在知道archieves数组的索引之前,不能递增值。
你得到了archieves数组的索引并使用以下命令递增。在这种情况下 0 在哪里 source = ObjectId(“54cb6f455decd8037528756b”)
db.test.update(
{_id:_id:ObjectId("54bf9ab4f8eda6747567b122")},
{$inc:{"archives.0.evalution.positive":1}}
)
答案 1 :(得分: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