【问题标题】:How to find and insert into sub document array list in MongoDB?如何在 MongoDB 中查找并插入子文档数组列表?
【发布时间】:2014-08-02 11:54:15
【问题描述】:

当值不存在时,我想向子文档的数组中的数组插入一个值。我有一个这样的集合

{
"_id" : ObjectId("53993f67ccbc960c7d05b74f"),
"groups" : [
    {
        "groupName" : "Default",
        "groupMembers" : [ ]
    },

    {
        "groupMembers" : [ ],
        "groupName" : "Family"
    },
    {
        "groupName" : "Friends",
        "groupMembers" : ["jack" ]
    }
],
"userName" : "krishna",
}

现在我想在Friends 组中查找 a 值,如果该值不存在,则应该插入它。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您想要$addToSet 运算符:

    db.groups.update(
        { "userName": "krishna", "groups.groupName": "Friends" },
        {
            "$addToSet": { "groups.$.groupMembers": "jack" }
        }
    )
    

    同样使用相同的positional $ 运算符来匹配所需的数组元素,您可以使用$addToSet,如果元素不存在,它会将元素“推送”到数组中。如果确实存在,则不执行更新。

    【讨论】:

    • @Nill Lunn,我收到以下错误Invalid modifier specified $addToset
    • @Mulagala Typo 在代码示例中。它在其他任何地方都输入正确。
    • @Nill Lunn,我们可以计算匹配的文档吗,因为当列表中已经有相同的成员时我需要警告,因为我在删除不在列表中的成员时可能会遇到问题。所以首先我需要在列表中找到一个成员
    • @Mulagala 见here。相同的基本原则适用于支持这些方法的所有驱动程序。在 shell 中,您将看到 MongoDB 2.6 及更高版本立即返回的结果。
    • @NeilLunn 我有一个类似的要求,我需要在子文档数组中添加/更新/删除以及在子文档的第一级内的子文档数组中添加/更新/删除-文档数组。我今天在 SO 上向question 询问了这个问题,因为我真的很困惑。
    猜你喜欢
    • 2020-09-08
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多