我有以下MongoDB结构
{
_id : ...,
other_stuff ... ,
my_array : [
{ title: ...., body: ...., email: .... },
{ title: ...., body: ...., email: .... },
{ title: ...., body: ...., email: .... }
]
}
我需要在“my_array”字段的子文档中更新/或插入(如果不存在)名为“click_number”的字段。如果“click_number”字段不存在,请插入该字段并将其设置为1;如果存在,则将其递增1。
首先,我不知道如何通过索引更新数组元素,其次,我不知道如何根据字段的存在进行更新或插入。感谢您的帮助
答案 0 :(得分:4)
您希望在集合中使用update
命令,如下所示(示例):
db.collection.update(
{ "my_array.title" : "title_one" },
{ $inc : { "my_array.$.click_number" : 1 } }
);
刚刚发生了什么?
在update
的第一个参数上,您定义query
以匹配您要更新的文档。我们在名为title
的数组中搜索名为my_array
的属性。您当然可以通过将点表示法修改为body
来匹配email
或"my_array.email"
。
第二个参数定义更新,即要应用的修改。我们有一个$inc
运算符来增加字段,我们在此语句中使用它们。 query
选择具有匹配数组元素的文档。您可以使用$
表示法来匹配此匹配的数组项。 "my_array.$"
选择匹配的数组元素,其中包含title
,email
和body
。如果您尝试为非现有字段赋值,MongoDB将为您执行此操作。如果该字段不存在,$inc
会将字段设置为指定的金额。 $inc
运算符接受正增量和负增量。
Learn more about the update command.
另一个例子:
db.collection.update(
{ _id : "john", "my_array.email" : "email" },
{ $inc : { "my_array.$.click_number" : 1 } }
);