Как сделать запрос регулярного выражения в JSONS внутри массива - PullRequest
1 голос
/ 25 мая 2019

Я хотел бы сделать запрос $ regex для поля внутри части $ match в структуре агрегации

Вот пример документа из коллекции:

{
    "_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": []
}

Я хочучто если значение запроса "Билл", он вернет мне этот документ

1 Ответ

1 голос
/ 25 мая 2019

Я получил это для работы со следующим конвейером, хотя я не рекомендую хранить данные таким образом, так как вы столкнетесь с такими проблемами. 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"
  }
],
...