У меня есть коллекция "предметов", в которой есть список поисковых тегов.Поскольку пользователь вводит в поле тега, я хочу отфильтровать все совпадающие теги по количеству элементов, которым принадлежит этот тег.Первоначально я использовал этот запрос:
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:"*"}}}} ])
Однако, когда я делаю это даже с * в качестве регулярного выражения, я не получаю возвращенных элементов.