2

我有以下 MongoDB 结构

{
  _id : ...,
  other_stuff ... ,
  my_array : [
    { title: ...., body: ...., email: .... },
    { title: ...., body: ...., email: .... },
    { title: ...., body: ...., email: .... }
  ]
}

我需要在“my_array”字段的子文档中更新/或插入(如果不存在)一个名为“click_number”的字段。如果“click_number”字段不存在,则插入该字段并将其设置为1;如果存在,则将其增加 1。

首先,我不知道如何通过索引更新数组元素,其次,我不知道如何根据字段的存在进行更新或插入。我感谢您的帮助

4

1 回答 1

4

您想update在您的集合上使用如下命令(示例):

db.collection.update(
    { "my_array.title" : "title_one" },
    { $inc : { "my_array.$.click_number" : 1 } }
);

刚才发生了什么?

update您定义的第一个参数上,query以匹配您希望更新的文档。title我们在名为的数组中搜索一个名为 的属性my_array。您可以匹配bodyemail当然也可以通过将点符号修改为:"my_array.email"

第二个参数定义要应用的更新、修改。我们有一个$inc操作符来增加字段,我们在这个语句中使用它。query选择具有匹配数组元素的文档。您可以使用$符号来获取此匹配的数组项。选择匹配的数组元素,该"my_array.$"元素具有title,emailbody。如果您尝试为不存在的字段赋值,MongoDB 会为您完成。如果该字段不存在,$inc则将该字段设置为指定的金额。$inc操作员接受正负增量金额。

了解有关更新命令的更多信息。

另一个例子:

db.collection.update(
    { _id : "john", "my_array.email" : "email" },
    { $inc : { "my_array.$.click_number" : 1 } }
);
于 2013-09-21T08:30:13.730 回答