如果存在则增加MongoDB中的嵌套字段值,否则创建嵌套字段。

3

如果存在多级嵌套字段值,则需要将其递增,否则创建完整的嵌套字段对象结构。

我的文档结构

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}}) - undefined
1个回答

0

尝试使用以下查询

如果该字段不存在,$inc将创建该字段并将其设置为指定的值。

db.collection('collectionName').findOneAndUpdate({_id:"userId"},
{$inc:{'myField.nested.x':10}
})

这在日期上如何运作?如果我想在一个日期上加6个月,但是如果这个日期不存在,选择$$NOW作为日期? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接