Прежде всего $ 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"}}
])