如果我的数据库中有以下文档:
{
"_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)
请试试这个:
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
. 此外,如果SubdocId2
是ObjectId()
你需要转换string
到ObjectId()
代码查询数据库之前。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句