【问题标题】:MongoDB find by object keyMongoDB 按对象键查找
【发布时间】:2021-01-08 17:17:40
【问题描述】:

我有以下结构(swagger 文件):

{
    "swagger":"2.0",
    ...
    "paths": {
        "/pet": {
            "post" : { ... }
            "put" : { ... }
         },
         "/anotherpetstore": {
            "post" : { ... }
            "put" : { ... }
         }
    }
}

我现在想要 {'paths': {'$regex':'pet'}} 并找到两条路径。

这在 MongoDB 中是否可行?

我发现了一些类似的问题,它们从未寻找对象本身的名称。
MongoDB Search nested Objects without knowing Key
How to find specific nested objects without knowing the parent key in mongodb

【问题讨论】:

    标签: mongodb nosql


    【解决方案1】:

    如果我的理解正确,你可以这样做:

    • 将对象paths转换为数组,可以使用$objectToArray获取键值。
    • 然后通过regex表达式过滤你想要的键。在这种情况下,pet 将匹配字符串具有“宠物”的值,但如果需要,您可以使用另一个正则表达式。
    • 之后,我们将只有与正则表达式匹配的路由对象,然后再次使用$arrayToObject 转换为对象
    db.collection.aggregate([
      {"$match": {"swagger": "2.0"}},
      {"$set": {"paths": {"$objectToArray": "$paths"}}},
      {
        "$set": {
          "paths": {
            "$filter": {
              "input": "$paths",
              "as": "p",
              "cond": {"$regexMatch": {"input": "$$p.k","regex": "pet"}}
            }
          }
        }
      },
      {"$set": {"paths": {"$arrayToObject": "$paths"}}}
    ])
    

    例如here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 2019-03-02
      • 1970-01-01
      • 2021-01-24
      相关资源
      最近更新 更多