如何在数组内的JSONS上进行正则表达式查询

时间:2019-05-25 13:27:32

标签: mongodb mongodb-query aggregation-framework

我想对聚合框架的$ match部分内的字段进行$ regex查询

以下是集合中的示例文档:

{
    "_id": ObjectId("5ce6bfea63519d2f77014dcc"),
    "lead_name": [
        {
            "Bill": "Toz"
        }
        ,
        {
            "Gordon":"Banks"
        }
    ],
    "lead_email": [
        {
            "email": "bto@.com"
        }
    ],
    "lead_phone_number": [
        {
            "phone_number": "+148034543"
        }
    ],
    "lead_country": [
        {
            "country": "US"
        }
    ],
    "lead_city": [
        {
            "city": "Phoenix"
        }
    ],
    "lead_team_id": "5cd98dd163519d6dd94aff12",
    "lead_source_id": "5cd98c9d63519d61432db1c5",
    "lead_status_id": "5cd98c9e63519d61432db387",
    "lead_assigned_to_user_id": "",
    "created_on_timestamp": 1558625945,
    "last_updated_on_timestamp": 1558625945,
    "lead_last_interaction_timestamp": 1558625945,
    "lead_last_interaction_subject": "Inbound call - answered",
    "lead_products": [],
    "lead_metadata": []
}

我希望如果查询值为“ Bill”,它将向我返回此文档

1 个答案:

答案 0 :(得分:1)

我使它可以与以下管道一起使用,尽管我不建议您以这种方式存储数据,否则您会遇到这样的问题。 https://mongoplayground.net/p/R_I5_J1KeiZ

db.collection.aggregate([
  {
    $match: {
      "lead_name": {
        $elemMatch: {
          "Bill": {
            $ne: null
          }
        }
      }
    }
  }
])

如果可以的话,建议您将数据更改为以下内容。最好在不同的集合中一次定义这些“潜在”用户,然后使用标识符对其进行引用。

虽然我不知道这些数据实际上存储了什么,所以对于您的用例来说,这可能不是一个很好的解决方案,但我想我也可以分享一个想法。

"lead_name": [
  {
    "firstname": "Bill",
    "lastname": "Toz",
    "email": "bto@.com",
    "phone_number": "+148034543",
    "country": "US",
    "city": "Phoenix"
  },
  {
    "firstname":  "Gordon",
    "lastname": "Banks"
  }
],