首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MongoDB嵌套数据中查找字段名

在MongoDB嵌套数据中查找字段名
EN

Stack Overflow用户
提问于 2022-03-31 22:19:23
回答 1查看 124关注 0票数 0

是否可能首先使用regex查找“字段名”,然后使用该字段名在所有文档中查找其值?

例如,如果我有以下结构:

代码语言:javascript
运行
复制
item : Object
  - quantity: 50
  - size: Object
    - h: 20

理想情况下,如果我想要h的值,我会查询item.antity.size.h ("field.nestedField")。然而,我只知道名称'h‘,但不知道它是嵌套在什么之下。是否可以检索整个字段名(item.antity.size.h)及其值(20)?然后,我想使用这个字段名从所有其他文档中获得值。

EN

回答 1

Stack Overflow用户

发布于 2022-04-02 15:05:45

灵感来源:不返回mongoplayground.net中的期望值

可以使用$function聚合,如下所示:

代码语言:javascript
运行
复制
    db.collection.aggregate([
  {
    $project: {
      data: "$$ROOT"
    }
  },
  {
    "$project": {
      "flattenKeys": {
        "$function": {
          "body": "function flatten(dataList, keysToHandle){while(keysToHandle.length){origKeyData = keysToHandle.shift();for (const newKey of Object.keys(origKeyData.objData)){keysToHandle.push({objData:origKeyData.objData[newKey],keyData:`${origKeyData.keyData}.${newKey}`});dataList.push(`${origKeyData.keyData}.${newKey}`);}}return dataList}",
          "args": [
            [],
            [
              {
                objData: "$data",
                keyData: "data"
              }
            ]
          ],
          "lang": "js"
        }
      }
    }
  },
  {
    $project: {
      matchingKeys: {
        $filter: {
          input: "$flattenKeys",
          as: "item",
          cond: {
            $regexMatch: {
              input: "$$item",
              regex: "keyD"
            }
          }
        }
      }
    }
  }
])

看看它是如何工作的,这里

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

https://stackoverflow.com/questions/71699746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档