Как сопоставить строку в массиве элементов в MongoDB - PullRequest
0 голосов
/ 28 октября 2019

У меня есть пример данных, как показано ниже, где я хочу получить результат только с данными, содержащими Volvo.

[
  'Volvo Sedan',
  'Volvo SUV',
  'Volvo Premium',
  'Volvo Sport',
  'Honda Sedan',
  'Honda SUV',
  'Honda Premium',
  'Honda Sport'
]

Я пробовал что-то подобное, но это не возвращает никаких результатов. Кто-нибудь может подсказать, пожалуйста, как этого добиться?

db.cars.distinct('carType', {carType: {$in: [/Volvo/]}})

1 Ответ

2 голосов
/ 28 октября 2019

Прежде всего $ in используется для сравнения значения поля в документе с массивом элементов в запросе, а не наоборот. Например, чтобы выбрать все документы, у которых есть хотя бы один carType, соответствующий /Volvo/, достаточно сделать

db.cars.distinct('carType', {carType: /Volvo/})

Во-вторых, отличный работает с документами. Сначала он применяет фильтр для сопоставления документов, которые имеют хотя бы один Volvo в массиве carType, затем он получает все carType в этих документах и ​​объединяется в один массив с уникальными значениями. Например, если у вас есть документ с carTypes

[
  'Volvo Sedan',
  'Volvo SUV',
  'Volvo Premium',
  'Volvo Sport',
  'Honda Sedan',
  'Honda SUV',
  'Honda Premium',
  'Honda Sport'
]

, первый элемент соответствует / Volvo /, поэтому все они будут включены в результат.


Предполагается, что вы хотите получитьсписок с уникальными типами carTypes, которые соответствуют вашему регулярному выражению, вам нужно использовать структуру агрегации. Например:

db.cars.aggregate([
    {$unwind: "$carType"},
    {$match: {carType: /Volvo/}},
    {$group: {_id: "$carType"}}
])
...