使用正则表达式的项目嵌套文档

问题描述 投票:1回答:1

免责声明:在MongoDB中是全新的。

我的文档结构如下:

{
  "hd": [
    {
      "rd": [
        {
          "rm": [
            {
              "code": "a1asd"
            },
            {
              "code": "a24aer"
            }
          ]
        },
        {
          "rm": [
            {
              "code": "b16hwe7"
            },
            {
              "code": "b2z41s"
            }
          ]
        }
      ]
    }
  ]
}

并且我想返回仅包含例如“ a1”的子文档。我将如何解决这个问题?

到目前为止我尝试过的解决方案看起来像这样

db.foo.aggregate([
    {
        $match: {
            "hd.rd.rm.code": /a1/
        }
    },
    {
        $project: {
            "hd.rd": {
                $filter: {
                    input: "$hd.rd",
                    as: "roomData",
                    cond: {
                        $eq: [
                            {
                                $substr: [ "$$roomData.rm.code", 0, 10]
                            },
                            "a1"
                        ]
                    }
                }
            }
        }
    }
])

但是上面的查询不起作用。我发现$ regexMatch无法与$ cond一起使用,因此目前我很茫然。

我的预期结果将如下所示:

{
  "hd": {
    "rd": {
      "rm": {
        "code": "a1asd"
      }
    }
  }
}
mongodb aggregation-framework
1个回答
0
投票

此查询可能会对您有所帮助,

db.collection.aggregate([
 {
    "$unwind": "$hd"
  },
  {
    "$unwind": "$hd.rd"
  },
  {
    "$unwind": "$hd.rd.rm"
  },
  {
    $match: {
      "hd.rd.rm.code": /a1/
    }
  }
])
© www.soinside.com 2019 - 2024. All rights reserved.