首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于值的MongoDB删除对象键

基于值的MongoDB删除对象键
EN

Stack Overflow用户
提问于 2022-05-16 04:25:24
回答 1查看 25关注 0票数 0

在我的应用程序中,我有一个MongoDB文档,它将使用$inc操作更新,以增加/减少appliesTo对象中的数量。下面是一个示例对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  name: "test-document",
  appliesTo: {
    profiles: {
      Profile1: 3,
      Profile2: 1
    },
    tags: {
      Tag1: 7,
      Tag2: 1
    }
  }
}

在运行以下命令之后

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
await db.items.updateOne({name: "test-document"}, {$inc: {'appliesTo.profiles.Profile2': -1})

我的文件将改为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  name: "test-document",
  appliesTo: {
    profiles: {
      Profile1: 3,
      Profile2: 0
    },
    tags: {
      Tag1: 7,
      Tag2: 1
    }
  }
}

我正在努力编写一个查询,该查询将删除所有键,其中的值为0。我目前唯一的解决方案是迭代每个键并使用$unset命令更新它。但这不是原子操作

是否有更明智的方法在一个查询中处理它?

EN

回答 1

Stack Overflow用户

发布于 2022-05-16 05:35:36

在单个常规更新quey中无法同时执行两种操作,您可以尝试从使用聚合管道进行更新 4.2开始执行MongoDB,

  • $cond检查是一个键字段的值大于1,然后执行$add操作,否则由$$REMOVE操作符删除它
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
await db.items.updateOne(
  { name: "test-document" },
  [{
    $set: {
      "appliesTo.profiles.Profile2": {
        $cond: [
          { $gt: ["$appliesTo.profiles.Profile2", 1] },
          { $add: ["$appliesTo.profiles.Profile2", -1] }
          "$$REMOVE"
        ]
      }
    }
  }]
)

游乐场

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72259179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文