Я храню журналы нашего веб-сервера в MongoDB, и схема выглядит примерно так:
[
{
"_id" : 12345,
"url" : "http://www.mydomain.com/xyz/abc.html",
....
},
....
]
Я пытаюсь использовать оператор $project
, чтобы немного изменить эту схему перед Я начинаю передавать свою коллекцию через конвейер агрегации. По сути, мне нужно добавить новое поле под названием «тип», которое позже будет использоваться для группировки. Логика нового поля довольно проста.
if "url" contains "pattern_A" then set "type" = "sales lead";
else if "url" contains "pattern_B" then set "type" = "existing client";
...
Я думаю, что это должно быть что-то вроде этого:
db.weblog.aggregate(
{
$project : {
type : { /* how to implement the logic??? */ }
}
}
);
Я знаю, как это сделать с помощью map-reduce (путем установки атрибута «keyf» для пользовательской функции JS, которая реализует описанную выше логику), но теперь я пытаюсь использовать новая структура агрегации, чтобы сделать это. Я попытался реализовать логику с помощью операторов выражений, но так далеко не мог заставить его работать. Любая помощь/предложение будет принята с благодарностью!