MongoDB中如何在对象级别进行匹配?

2023-12-08

输入文件

  "data": {
    "abc": {
      "Id": "100"

    },
    "xyz": {
      "Id": "123"
    }
}

解释: 我想做$match on data.{i} i is parameter 如果我给"abc" as a parameter我得到以下输出,我想将多个参数传递给 i "abc", "xyz".. 我怎样才能做到这一点,使用参数 $match 对象键。

预期输出 :

  "data": {
    "abc": {
      "Id": "100"
    },
}

  • 检查密钥是否存在或未使用$exists
  • 投影该键,
let i = "abc";
Schema.find(
  { ["data."+i]: { $exists: true } },
  { ["data."+i]: 1 }
)

操场


如果您有数组中的键列表,则第二个选项,

  • 映射通过准备查询$or条件,并准备项目部分
let i = ["abc", "xyz"];
let query = [], project = {};
i.map(k => {
  query.push({ ["data."+k]: { $exists: true } });
  project["data."+k] = 1;
});

Schema.find({ $or: query }, project);

操场


第三种选择是使用从 MongoDb v4.4 开始的项目运算符,采用更动态的方法,

  • $objectToArray将对象转换为数组
  • $filter过滤上面转换后的数组并获取匹配元素
  • $arrayToObject将数组转换回对象
let i = "abc";
Schema.find(
  { ["data."+i]: { $exists: true } },
  {
    data: {
      $arrayToObject: {
        $filter: {
          input: { $objectToArray: "$data" },
          cond: { $eq: ["$$this.k", i] }
        }
      }
    }
  }
)

操场

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB中如何在对象级别进行匹配? 的相关文章

随机推荐

  • 通过 AJAX 请求的资源可以使用基于 PHP 的脚本进行代理吗?

    我想知道基于 PHP 的代理是否可以处理 AJAX 数据 我正在尝试制作一个或使用现成的脚本 Thanks Yes 您的客户端 JavaScript 可以向同域服务器端脚本 例如本例中的 PHP 发出 AJAX 请求 然后 PHP 脚本可以
  • 使用 Jquery colorbox 和通过 Aspx 读取的动态图像时出现问题

    为了在我的网站上显示全尺寸图像 我决定使用 Jquery colorbox 此插件适用于静态图像位置 例如 a href http www blah com image jpg img src http www blah com image
  • 在 C# 中读取/写入文本文件进度条

    我有一个函数可以读取一个大文本文件 分割一部分 从给定的开始和结束 并将分割的数据保存到另一个文本文件中 由于文件太大 我需要在读取流时添加进度条另一个是在将分割的文本写入另一个文件时 Ps start 和 end 给出了日期时间 usin
  • Android - 为乒乓球游戏创建计时器循环

    我有一个Pong我用 Java 编写的游戏 我正在尝试将其移植到 Android 上 这是我的第一个 Android 游戏 在Java中我使用了Timer对象基本上更新了游戏值 球 球拍位置 然后重新绘制屏幕 我正在尝试在 Android
  • Android 日历重复事件的结束日期/时间错误

    这是我的代码 用于查看从 ListActivity 中选择的事件 events是包含所有这些事件的 ArrayList Uri viewUri Uri parse content com android calendar events ev
  • 错误 - 输入最多 1 个参数,但得到 3 个

    我设置了以下 for 循环来接受 5 个测试分数 我希望循环提示用户输入 5 个不同的分数 现在 我可以通过编写输入 请输入您的下一个测试分数 来做到这一点 但我宁愿让每个输入的分数提示其关联的数字 因此 对于第一个输入 我希望它显示 请输
  • 计算属性和闭包属性集之间的区别

    我是斯威夫特的新手 计算属性和设置为闭包的属性有什么区别 我知道计算属性每次都会重新计算 关闭时有什么不同吗 IE Closure var pushBehavior UIPushBehavior let lazilyCreatedPush
  • 如何在 C# 中创建上下文菜单

    我想使用 C 创建一个上下文菜单 该菜单将显示在节点旁边 类似于 Visual Studio 中发生的情况 我现在的代码导致主窗体闪烁 private void treeView1 MouseDown object sender Mouse
  • 将(长尾数)和(sbyte 指数)转换为十进制

    upd将我的版本放在最后的描述中 我需要将尾数和指数转换为十进制 这就是我的编码方式 long field Decimal Mantissa sbyte field Decimal Exponent decimal MDEntryPx fi
  • 如何获取当前视图 HTML 源并将其作为字符串传递 JSF ManagedBean

    我想获取当前视图 HTML 源并将其作为参数传递给 JSF 托管 bean 无论如何 JSF 我可以做到这一点吗 您无法在 JSF 中执行此操作 因为它根本不在 Web 浏览器中运行 最好的选择是使用 JavaScript 下面的示例在单击
  • 三星 Galaxy 蓝牙驱动程序

    我已经为 Android 编写了一个应用程序 主要部分是它通过蓝牙进行通信 我有四台设备 1 三星Galaxy S22 三星Galaxy Gio3 Netsurfer touch 南非本地生产的低端安卓平板电脑 4 摩托罗拉 ET1 现在我
  • 在 Angular 2 中调用组件刷新

    我正在尝试实现一个导航栏 根据用户是否登录显示不同的链接 我正在使用angular2 jwt图书馆提供了tokenNotExpired 功能 我有2条路线 home and login 我有一个导航栏组件 位于
  • 在 ClearCase UCM 中创建的两个基线

    我正在使用复合基线设置一个项目 当我创建发送到 主线 项目的基线时 它总是创建两个基线 一个称为 COMP BL 另一个称为 COMP BL 发生这种情况有原因吗 我的设置可能有问题吗 不 你的设置是正确的 它将始终按已更改的组件创建一个基
  • 同一行上多次按位移位导致的意外行为[重复]

    这个问题在这里已经有答案了 根据我是否将多个按位移位组合在一行上或将它们放在单独的行上 我会得到不同的结果 unsigned char a 73 a a lt lt 6 gt gt 2 printf d n a 当我期望 16 时打印 14
  • 通过用户脚本删除网站标题的一部分

    我尝试编写一个用户脚本这会删除网站标题 Flash 浏览器游戏 中的所有内容 但会删除开始操作时出现的倒计时 我是 Javascript 新手 需要一些帮助 UPDATE 正则表达式问题已解决 但我仍然需要一些帮助来让此脚本 监视 标题 以
  • 如何发出产生与 Firefox 相同的响应标头的 cURL 请求

    当我使用 Firefox 浏览页面并单击下载链接时 在网络检查器中检查请求时会显示以下标头 Connection keep alive Content Disposition attachment filename example file
  • 如何在 SwiftUI 或无限列表视图中实现列表分页?

    我需要有关如何在 SwiftUI 中实现无限列表滚动或分页列表的帮助 提前致谢 你最好的选择是使用 onAppear并计算是否该获取下一页 这是一个人为的示例 因为通常您访问的网络或磁盘比这慢得多 但它会给您一个想法 调getNextPag
  • Valgrind 在 pthread_spin_lock 中挂起,消耗 100% CPU

    我的 C 多线程应用程序在 valgrind 版本 3 8 0 及最新版本的 pthread spin lock 中挂起 但在 3 6 0 3 6 1 和 3 7 0 中并没有发生这种情况 有人知道这个问题有什么解决方法吗 这是导致 val
  • hadoop和spark现在支持IPv6吗?

    我想在纯IPv6环境上构建Hadoop和Spark集群 我已经通过 IPv4 构建了它 如何配置在 IPv6 环境下运行它们 hadoop 和 Spark 现在支持 IPv6 吗 它不是 截至今日HADOOP 11890跟踪 IPv6 支持
  • MongoDB中如何在对象级别进行匹配?

    输入文件 data abc Id 100 xyz Id 123 解释 我想做 match on data i i is parameter 如果我给 abc as a parameter我得到以下输出 我想将多个参数传递给 i abc xy