如果存在或创建嵌套字段,则在 mongodb 中增加嵌套字段值
Increment nested field value in mongodb if exists or create nested fields
我需要递增多层嵌套字段值(如果存在)或创建完整的嵌套字段对象结构。
我的文档结构
Doc1 {
_id:ObjectId(),
myField: {
nested:{
x: 5,
y: 10,
z: 20
}
}
}
目标说明:我需要一种方法来编写单个查询:
- 如果 myField 存在: 增加我的嵌套字段的值
myField.nested.x 乘以 10。
- 如果 myField 不存在:创建以下字段,其初始值与 Doc1.
中给出的初始值相同
尝试与解释:
db.collection('collectionName').findOneAndUpdate(
{_id:"userId","myField" : { $exists : true }},
{$inc:{'myField.nested.x':10}
})
这样,如果嵌套字段存在,我可以递增它,但如果不存在,我无法将 myField 设置为与 Doc1 相同。
不过,我可以在 NodeJs 回调中响应后使用另一个查询来实现所需的行为。但我需要在单个查询中提供一些优雅的解决方案。
我正在使用 MongoDB 版本 4.0.4,在此先感谢。
试试这个查询
如果该字段不存在,$inc 将创建该字段并将该字段设置为指定值。
db.collection('collectionName').findOneAndUpdate({_id:"userId"},
{$inc:{'myField.nested.x':10}
})
我需要递增多层嵌套字段值(如果存在)或创建完整的嵌套字段对象结构。
我的文档结构
Doc1 {
_id:ObjectId(),
myField: {
nested:{
x: 5,
y: 10,
z: 20
}
}
}
目标说明:我需要一种方法来编写单个查询:
- 如果 myField 存在: 增加我的嵌套字段的值 myField.nested.x 乘以 10。
- 如果 myField 不存在:创建以下字段,其初始值与 Doc1. 中给出的初始值相同
尝试与解释:
db.collection('collectionName').findOneAndUpdate(
{_id:"userId","myField" : { $exists : true }},
{$inc:{'myField.nested.x':10}
})
这样,如果嵌套字段存在,我可以递增它,但如果不存在,我无法将 myField 设置为与 Doc1 相同。
不过,我可以在 NodeJs 回调中响应后使用另一个查询来实现所需的行为。但我需要在单个查询中提供一些优雅的解决方案。
我正在使用 MongoDB 版本 4.0.4,在此先感谢。
试试这个查询
如果该字段不存在,$inc 将创建该字段并将该字段设置为指定值。
db.collection('collectionName').findOneAndUpdate({_id:"userId"},
{$inc:{'myField.nested.x':10}
})