MongoDB - 使用多个过滤条件更新数组对象中的字段

保罗

如果我的数据库中有以下文档:

{
    "_id" : MainId,
    "subdoc" : [
        {
            "_id" : SubdocId,
            "userid" : "someid",
            "toupdate": false,
        },
        {
            "_id" : SubdocId2,
            "userid" : "someid2",
            "toupdate": false,
        }       
    ],
    "extra" : [
        "extraid1",
        "extraid2"
    ]
}

如何更新子文档 SubdocId2,其中 id (SubdocId2) 必须匹配并且 SubdocId2 的用户 ID 是“someid2”或值“extraid1”存在于“extra”中?

我得到的最远的是:

db.coll.update({
"subdoc._id":"SubdocId2", {
    $or: ["extra":{$in:["extraid1"]}, "subdoc.userid":"someid2"]
    }
}, {"subdoc.$.toupdate":true})

也许我忘了引用某些东西,但我收到了一个错误 (SyntaxError: invalid property id)

whoami - fakeFaceTrueSoul

请试试这个:

db.coll.update(
    {
        $and: [{ "subdoc._id": SubdocId2 }, {
            $or: [{ "extra": { $in: ["extraid1"] } },
            { "subdoc.userid": "someid2" }]
        }] // subdoc._id && (extra || subdoc.userid)
    }, { $set: { "subdoc.$.toupdate": true } })

在您的查询中,有几个语法问题,而且如果您不在$set更新部分中使用 - 它会将整个文档替换为"subdoc.$.toupdate": true. 当然,如果您使用的mongoose是不同的场景,因为 mongoose 会在内部添加,$set但是在 shell 或任何客户端中执行时,您需要指定$set. 此外,如果SubdocId2ObjectId()你需要转换stringObjectId()代码查询数据库之前。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章