MongoDB 更新数组元素(带有键的文档)如果存在,否则推送

2023-11-26

我有这样的架构:

doc:
{
    //Some fields
    visits:
    [
        {
            userID: Int32
            time: Int64
        }
    ]

}

我想首先检查是否有特定的userID存在,如果不存在,则推送一个包含该文件的文档userID和系统time,否则只需更新time价值。我都不知道$push nor $addToSet无法做到这一点。还使用$ with upsert:true没用,因为官方文档建议 DB 将使用$尝试更新插入时作为字段名称而不是运算符。

请指导我这件事。谢谢


您可以使用$addToSet将一个项目添加到数组中并$set更新此数组中的现有项目。

如果以下内容将添加一个新项目到数组中userID在数组中找不到:

db.doc.update({
    visits: {
        "$not": {
            "$elemMatch": {
                "userID": 4
            }
        }
    }
}, {
    $addToSet: {
        visits: {
            "userID": 4,
            "time": 1482607614
        }
    }
}, { multi: true });

如果子文档数组项与以下内容匹配,则以下内容将更新userId :

db.doc.update({ "visits.userID": 2 }, {
    $set: {
        "visits.$.time": 1482607614
    }
}, { multi: true });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 更新数组元素(带有键的文档)如果存在,否则推送 的相关文章

随机推荐