如何根据条件更新具有 2 个可能值的字段?

2023-12-02

我是 mongodb 的新手。

我有一个这样的数据库:

{
 "universe": "DC",
 "characters": [
 {"name": "superman", "selected": true}, 
 {"name": "wonder woman", "selected": false}, 
 {"name": "flash", "selected": false}
},
{ 
 "universe": "marvel",
 "characters": [
  {"name": "wolverine", "selected": false}, 
  {"name": "cyclops", "selected": false}
}

我正在尝试做如果universe是“DC”,更新它的characters角色所在的位置name等于“神奇女侠”,那么我想要归属感selected字段要更新为true在同一文档中,与不匹配的字符name《神奇女侠》的价值false in selected

mydb.collection.findOneAndUpdate(
{
  "universe": "DC", //only DC universe
  "characters.name":"wonder woman"   
},
{
  $set: {
    "characters.$.selected": true,  // I dont know how to set false to other objects where name!=wonder woman
  },
})

期望的结果:

 {"name": "superman", "selected": false}, 
 {"name": "wonder woman", "selected": true}, 
 {"name": "flash", "selected": false}

我该怎么做?


从 MongoDB 3.6 开始,更新数组字段时,可以指定数组过滤器确定要更新哪些数组元素。

mydb.collection.findOneAndUpdate(
    {
        universe: "DC"
    },
    {
        $set : {
            "characters.$[has].selected" : true,
            "characters.$[not].selected" : false
        }
    },
    { 
        arrayFilters: [ 
            { 
                "has.name": { $eq: "wonder woman" }
            },
            { 
                "not.name": { $ne: "wonder woman" }
            } 
        ],
        returnNewDocument: true
    }
)
  • 以下操作查找一个文档,其中universe字段等于“DC”
  • 使用过滤的位置运算符$[<identifier>]arrayFilters修改selected to true对于中的所有元素characters数组,其中name (有名字) is $eq去“神奇女人”
  • 另一边的arrayFilters修改selected to false对于中的所有元素characters数组,其中name (不是名字) is $ne“神奇女人”。
  • returnNewDocument: true返回更新后的文档
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据条件更新具有 2 个可能值的字段? 的相关文章

随机推荐

  • 如何在 404 Tomcat 上重定向到外部网站

    我使用的是 spring 3 Tomcat 7 In web xml我已经定义了
  • TFS 构建定义未将 mvc 应用程序部署到 IIS

    我正在尝试使用 Visual Studio 的团队资源管理器和 TFS 创建构建定义以将 MVC 站点部署到 IIS 我遵循了名为 Team Foundation Server 2010 的持续部署 的 Pluralsight 教程 我从本
  • 使用 Java 从麦克风传输音频

    我正在开发一个项目 需要我将音频从客户端的麦克风流式传输到服务器 下面显示的代码是我写的 当我同时运行客户端和服务器代码时 音频不会实时传输 事实上 来自客户端的音频存储在缓冲区中 当我终止客户端代码的执行时 来自服务器缓冲区的音频将输出到
  • Java 不稳定的并发性

    好的 我刚刚读了这个问题你在 Java 中使用过 volatile 关键字吗 并且我使用易失性变量来停止循环 我也看过这个参考资料 http www javamex com tutorials synchronization volatil
  • 如何使用java流比较两个ArrayList并通过过滤器获取list1

    我有两个类型为 List 的列表 list1 和 list2 Term long sId int rowNum long psid String name List
  • 如何将 JSON 字符串转换为数组(PHP)?

    使用下面的代码来解码json categories json decode data categories categories gt data 我从哪里得到这个 categories id 1 name Utilities apps 89
  • 将两个单独的 wp 查询合并为一个查询以进行搜索

    目前 我的类别页面上有一个搜索栏 可以搜索产品标题 自定义帖子类型 或品牌分类 我可以让这两个独立工作 将任一参数传递给 WP Query 但是如果我尝试将它们数组合并在一起 则两者都不起作用 我所拥有的是 search sanitize
  • Base64 对文件进行编码并压缩

    我的目标是对文件进行编码并将其压缩到java中的文件夹中 我必须使用 Apache 的 Commons codec 库 我能够对其进行编码和压缩 并且工作正常 但是当我将其解码回原始形式时 看起来该文件尚未完全编码 看起来缺少一些零件 谁能
  • 中断命令 (ctrl+C) 不再在 macOS 上的 VS Code 1.78 终端中工作

    我打开的每个终端的顶部都是文本 bash 此 shell 中没有作业控制 我不记得在 VS Code 中更改过任何内容 但现在我无法再使用 control c 来停止终端中的内容 例如 npm run dev 和 node app js 在
  • 显示我的 nuget 的源代码

    我和我的团队构建了我们自己的框架 我们在许多项目中使用 我们曾经将框架的项目包含在所有其他项目中 但后来我们决定将框架放入 nuget 服务器上的 nuget 包主机中 以便我们可以在开发过程中更轻松地进行版本控制和传播框架 一切都工作正常
  • 将代码文件移动到项目中的另一个文件下

    我想将一个代码文件移到另一个相关文件组下 如下所示 如你所见 SingleObjectViewModel Commands cs隐藏在SingleObjectViewModel cs团体 在某些情况下它可能很有用 我已经创建了SingleD
  • 将 Spring Boot 应用程序部署到 AWS Beanstalk

    将 Spring Boot 项目 最好只是 jar 部署到 AWS Beanstalk 环境的最佳方式是什么 或者我应该将其转换为 WAR 并以这种方式部署 解决方案 基本上我所做的是这样的 创建了新类来告诉 Spring Boot 我的应
  • ASP.NET 中 GridView 中的内部网格线

    我有一个GridView在 ASP NET 2 0 中 我希望仅显示内部网格线 到目前为止 这是我的标记和 CSS
  • 离子启动画面未加载

    我已经检查并仔细检查了 Stack Overflow 以获得有关此问题的答案 但我真的找不到答案 我正在使用离子框架构建一个应用程序 虽然我以前从未遇到过这个问题 但由于某种原因 启动屏幕无法工作 我只是得到一个完全白色的屏幕 然后在加载初
  • iPhone中的应用程序间通信

    我只是想知道是否有任何方法可以从 iPhone 中的应用程序外部访问文档 例如 我希望能够将 Word 文档从邮件发送到我的应用程序 我怎样才能实现这个目标 提前致谢 这是一个博客 描述了 iOS 应用程序中应用程序间通信的工作原理 iOS
  • 在汇编中打印字符的三角形

    我正在开发这个练习 编写汇编程序 给定一个字符作为输入 输出一个大小为字符本身 5 x 5 的三角形 我有一个问题 因为当我输入一个字符时 这些字符没有形成三角形 而是打印了其他字符 我的输入 f 我的输出 期望的输出 f ff fff f
  • 使用 ImageMagick 将具有自定义字体的 SVG 转换为 PNG

    我使用 ImageMagick 将 SVG 转换为 PNG 一切都像魅力一样 直到我尝试使用 font face 添加自定义字体 然后在 SVG 文件中添加自定义字体 在 Batik 中这工作得很好 但现在在 ImageMagick 中我无
  • 制作/查找 html5 验证器书签

    我想找到或制作一个书签 它将使用 W3C HTML 5 验证器验证当前查看的页面的 html 内容 我找到了两个小书签 并试图让其中一个的行为有点像一个 又有点像另一个 但我不知道该怎么做 克里斯 科伊尔有一个HTML5 验证书签效果很好
  • 如何在 python 中使用 xlsxwriter 将数据写入/更新现有 XLSX 工作簿的单元格

    我可以使用写入新的 xlsx 工作簿 import xlsxwriter def write column csvlist workbook xlsxwriter Workbook filename xlsx strings to numb
  • 如何根据条件更新具有 2 个可能值的字段?

    我是 mongodb 的新手 我有一个这样的数据库 universe DC characters name superman selected true name wonder woman selected false name flash