如何在不指定父字段的情况下直接查询嵌套字段?

2023-12-22

我在 mongodb 中有接下来的 3 个文档:

文件1:

{
    "name": "device1",
    "camera": {
        "number": 3
    }
}

文件2:

{
    "name": "device2",
    "camera": {
        "number": 1
    }
}

文件3:

{
    "name": "device3",
    "wifi": {
        "number": 2
    }
}

我的目标是找到模块编号> 1的所有设备,该模块可能camera, wifi或其他。

我知道我可以使用 next 来获取设备:

> db.devices.find({"camera.number":{$gt:1}})
{ "_id" : ObjectId("5f436a3df716cb47d319245e"), "name" : "device1", "camera" : { "number" : 3 } }
> db.devices.find({"wifi.number":{$gt:1}})
{ "_id" : ObjectId("5f436a58f716cb47d3192460"), "name" : "device3", "wifi" : { "number" : 2 } }

但看起来我必须在查询中添加类似“module.number”的内容,你知道也许我有很多模块,然后使用效率不高camera.number, wifi.number & othermodule.number查找所有匹配的设备。如果可能的话,我可以有一些魔法来直接获取“有任何模块编号> 1”的设备,我的意思是不需要指定父字段?


很简单,只需更改您的架构即可。

https://mongoplayground.net/p/npSvVzbnsyk https://mongoplayground.net/p/npSvVzbnsyk

  {
    "name": "device1",
    "modules": [
      {
        "k": "camera",
        "v": 3
      }
    ]
  },
  {
    "name": "device2",
    "modules": [
      {
        "k": "wifi",
        "v": 3
      },
      {
        "k": "camera",
        "v": 2
      }
    ]
  },
  {
    "name": "device3",
    "modules": [
      {
        "k": "wifi",
        "v": 2
      }
    ]
  }

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

如何在不指定父字段的情况下直接查询嵌套字段? 的相关文章

随机推荐

  • OkHttp 对请求启用/禁用 gzip 压缩

    我在用着Retrofit管理我的请求并希望进行一些测试来检查使用或不使用 gzip 的请求大小 默认情况下OkHttp对请求执行 gzip 压缩 或者必须使用拦截器 https github com square okhttp wiki I
  • jQuery 文档就绪与窗口加载冲突?

    我正在尝试拼凑一个视频库 我正在使用 jQuery 制作滑出面板 这很简单 我还使用 jQuery 来滚动缩略图 他们都工作得很好 问题是我需要滚动缩略图在滑出面板内工作 但事实并非如此 我认为这与文档准备好和窗口加载两个功能有关 我不确定
  • Ruby 中引发异常与抛出异常有什么区别?

    Ruby 有两种不同的异常机制 Throw Catch 和 Raise Rescue 为什么我们有两个 什么时候应该使用其中一种而不是另一种 raise fail rescue and ensure handle errors 也称为例外情
  • 如何以编程方式更新客户商店信用

    我正在使用 Magento 版本 1 9 1 1 我需要更新客户的商店信用余额 我知道可以在 Magento 管理界面中执行此操作 但就我而言 我需要向服务器发出 HTTP 请求 并且实际上执行与通过 Magento 管理界面执行的操作相同
  • 将brew安装的库包含到XCode中

    我正在尝试使用 Raylib 创建游戏 我想使用 XCode 因为我认为库管理会像 Windows 上的 Visual Studio 一样简单 我安装了这个库brew install raylib 现在我尝试运行这个从 Raylib 网站复
  • apollo graphql 响应数据中未显示“Extensions”字段

    这里有一个可重现的例子 https github com stonecold123 typegraphql test Run app js并在操场上导航http localhost 4000 graphql http localhost 4
  • VBA 中的编辑距离 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有包含数据的 Excel 工作表 我想获取它们之间的 Levenshtein 距离 我已经尝试导出为文
  • 使用 Python 2.7 的 HTML 解析树

    我试图为下面的 HTML 表配置一棵解析树 但无法形成它 我想看看树结构是什么样的 有人可以帮助我吗 p class title b The Dormouse s story b p p class story Once upon a ti
  • Python:BASIC 中是否有相当于中、右、左的词?

    我想做这样的事情 gt gt gt mystring foo gt gt gt print mid mystring Help 切片来救援 def left s amount return s amount def right s amou
  • iText 通过检查 CRL 来验证签名

    我正在设置一个验证器 可以检查签名的有效性 我所做的签名基于 DSS 级别 LT 因此文档中内置了撤销检查 我现在遇到的问题是在我在iText中开发的验证器层面 它允许验证签名的有效性以及撤销信息的有效性 根据我的研究 IText 允许基于
  • 在 Vim 中查找 C++ 类成员的定义/引用

    我正在将 Vim 用于一个我已经开始从事的 C 项目 并且最近我花了很多时间浏览现有代码以掌握它的窍门 为了使浏览更容易 我在 Vim 中设置了 ctags 和 cscope 来跳转到定义并查找引用 然而 我发现他们都没有足够的智能来知道成
  • 具有错误字符容限的最长公共子串

    我在这里找到了一个脚本 在寻找最低公共子串时效果很好 但是 我需要它来容忍一些不正确 丢失的字符 我希望能够输入所需的相似性百分比 或者指定允许的丢失 错误字符的数量 例如 我想找到这个字符串 大黄色校车 该字符串内部 那天下午他们乘坐黄色
  • 在node.js中使用python模块

    是否可以创建一种胶水 使 python 模块 更具体地说 库绑定 可以在 Node js 中使用 一些数据结构可以直接映射到 V8 对象 例如数组 字典 更重要的是 这会是比手动或通过 FFI 更优雅的创建绑定的方式吗 简而言之 值得吗 试
  • 更改seaborn条形图中的色标

    我想对我的数据使用seaborn条形图 并根据Y轴的值使用色标 例如 在此图像中 颜色根据调色板从左到右变化 但我真正想要的是相同的配色方案 但 垂直 而不是 水平 这可能吗 我已经搜索并尝试设置hueY 轴参数 但它似乎不起作用 我该怎么
  • 为什么 std::chrono::time_point 不够大,无法存储 struct timespec?

    我正在尝试最近的std chronoapi 和我发现在 64 位 Linux 架构和 gcc 编译器上time point and duration类无法以最大分辨率 纳秒 处理操作系统的最大时间范围 事实上 相比之下 这些类的存储似乎是
  • 谷歌地图v3:边界中心与地图中心不同

    怎么可能map getCenter 可能不同于map getBounds getCenter gt cragMap getCenter gt Q d 13 823563748466814 e 0 toString function b fu
  • Jupyter 笔记本注释快捷方式不起作用

    我试图使用 ctrl 在 jupyter 笔记本中注释行 但这不起作用 我使用的是 Windows 10 和 Mozilla Firefox 您的问题可能是由于您的浏览器设置造成的 ctrl 必须设置为其他值 否则您不会处于编辑模式
  • 如何让Hibernate在与JPA一起使用时自动在数据库中创建表?

    我是 JPA 的新手 现在我正在尝试理解标准示例 我在网上阅读并看到了一些 stackoverflow 问题 我在所有这些问题中发现以下语句将允许 hibernate 在运行时创建表 hibernate hbm2ddl auto creat
  • 如果我没有接住投掷会发生什么?

    这是非常基本的 但我在任何地方都找不到答案 那里有很多关于投掷和接球的帖子 但如果我实际上会发生什么throw from function1然后打电话function1 from function2但不要抓住它 这是否意味着它只是被重新抛出
  • 如何在不指定父字段的情况下直接查询嵌套字段?

    我在 mongodb 中有接下来的 3 个文档 文件1 name device1 camera number 3 文件2 name device2 camera number 1 文件3 name device3 wifi number 2