在MongoDB中通过索引在数组的子文档中插入一个字段

时间:2013-09-21 05:05:54

标签: mongodb

我有以下MongoDB结构

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

我需要在“my_array”字段的子文档中更新/或插入(如果不存在)名为“click_number”的字段。如果“click_number”字段不存在,请插入该字段并将其设置为1;如果存在,则将其递增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.$"选择匹配的数组元素,其中包含titleemailbody。如果您尝试为非现有字段赋值,MongoDB将为您执行此操作。如果该字段不存在,$inc会将字段设置为指定的金额。 $inc运算符接受正增量和负增量。

Learn more about the update command.

另一个例子:

db.collection.update(
    { _id : "john", "my_array.email" : "email" },
    { $inc : { "my_array.$.click_number" : 1 } }
);