MongoDB Соответствие после агрегации - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть коллекция "предметов", в которой есть список поисковых тегов.Поскольку пользователь вводит в поле тега, я хочу отфильтровать все совпадающие теги по количеству элементов, которым принадлежит этот тег.Первоначально я использовал этот запрос:

db.kCItem.aggregate(
[{$match:{searchTags:{$elemMatch:{tagLabel:{$regex:".*veg.*"}}}}},
{$unwind:"$searchTags"},
{$group:{_id:{tagurl:{$toLower:'$searchTags._id'},
label:"$searchTags.tagLabel"}, count: {$sum:1}}}])

Это возвращает список, подобный этому:

{ "_id" : { "tagurl" : "vegetarian", "label" : "vegetarian" }, "count" : 1 }
{ "_id" : { "tagurl" : "veg", "label" : "veggie" }, "count" : 1 }

К сожалению, этот запрос также возвращает «другие» теги (не соответствующие регулярному выражению), которыесвязаны с элементами, которые соответствуют регулярному выражению.Я планировал добавить дополнительный $ match к агрегации:

db.kCItem.aggregate([
{$match:{searchTags:{$elemMatch:{tagLabel:{$regex:".*waffle.*"}}}}},
{$unwind:"$searchTags"},
{$group:{_id:{tagurl:{$toLower: '$searchTags._id'},label:"$searchTags.tagLabel"}, count: {$sum:1}}},
{$match:{_id:{label:{$regex:"*"}}}} ])

Однако, когда я делаю это даже с * в качестве регулярного выражения, я не получаю возвращенных элементов.

1 Ответ

0 голосов
/ 19 декабря 2018

Последний конвейер агрегации должен быть

{$match : {"_id.tagurl" : {$regex : "veg"}}}

или

{$match : {"_id.tagurl" : /veg/}}

использовать точечную нотацию для перехода к встроенным или подчиненным элементам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...