【问题标题】:upsert a field in a subdocument in an array by index in MongoDB在MongoDB中按索引在数组中的子文档中插入字段
【发布时间】:2013-09-21 16:30:13
【问题描述】:

我有以下 MongoDB 结构

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

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

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

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

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

    刚刚发生了什么?

    在update 的第一个参数上,您定义一个query 来匹配您希望更新的文档。我们在名为my_array 的数组中搜索名为title 的属性。您当然可以通过将点符号修改为:"my_array.email" 来匹配 body 或 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 } }
    );
    

    【讨论】:

    • 这是我见过的关于流星的最彻底解释的答案之一。你解释这个的方式太棒了!甚至没有解决我的问题,但还是谢谢!
    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2016-12-29
    • 2016-11-06
    相关资源
    最近更新 更多