我希望创建一个mongodb查询来更新一次文档,这样就可以设置一些带有值的字段,如果已有字段可用(其他字段未设置)则取消设置。
我是这样做的:
db.collection('collectionName").find({"itemId": itemsDataArray[i].itemId }).updateOne(
{ "$unset" :
{
"field1": 1,
"field2": 1,
"field3": 1
}
},
{ "$set":
{
"field4" : "value",
"field5" : "value"
}
})
现在问题是如果文档中没有field1,2或3,那么查询无法设置字段4和5.
我在mongo查询中是否缺少任何标志? 请帮忙。
编辑:解决方案
db.collection('collectionName').find({"itemId": itemsDataArray[i].itemId }).updateOne(
{ "$unset" :
{
"field1": 1,
"field2": 1,
"field3": 1
},
"$set":
{
"field4" : "value",
"field5" : "value"
}
})
答案 0 :(得分:2)
我认为你的大括号错了。
您正在使用.collection(...).find(...).updateOne({"$unset" :{} }, {"$set": {} })
。
您应该使用.collection(...).find(...).updateOne({"$unset" :{}, "$set": {} })
。
请注意,您错过了filter
的{{1}}参数。你看过findOneAndUpdate吗?
最后,它可能是一个复制/粘贴错误,但是在集合访问(updateOne
)中引号不匹配。
答案 1 :(得分:1)
请阅读updateOne的文档。
第一个参数是过滤器。你想要达到的目标应该是:
db.d.updateOne(
{"itemId": itemsDataArray[i].itemId},
{
"$unset":
{
"field1": 1,
"field2": 1,
"field3": 1
},
"$set":
{
"field4" : "value",
"field5" : "value"
}
}
)