Пожалуйста, просмотрите мой вопрос:
MongoDB $group и явное формирование группы с вычисляемым столбцом
Но на этот раз мне нужно сравнивать строки, а не числа. Запрос CASE должен иметь LIKE:
CASE WHEN source LIKE '%Web%' THEN 'Web'
Затем мне нужно сгруппировать по источнику. Как написать это на монго? Я пытаюсь сделать следующее, но не уверен, что $regex поддерживается внутри $cond. Кстати, есть ли где-нибудь список допустимых операторов внутри $cond? Похоже, $cond меня не очень любит :)
db.Twitter.aggregate(
{ $project: {
"_id":0,
"Source": {
$cond: [
{ $regex:['$source','/.* Android.*/'] },
'Android',
{ $cond: [
{ $eq: ['$source', 'web'] }, 'Web', 'Others'
] }
]
}
} }
);
Есть много других значений, которые мне нужно записать туда, делая более глубокую вложенность. Это всего лишь пример с «Android» и «Web» для краткости. Я пробовал как с $eq, так и с $regex. Использование $regex дает ошибку недопустимого оператора, тогда как использование $eq не понимает выражение регулярного выражения и помещает все в «Другие». Если это возможно с регулярным выражением, пожалуйста, дайте мне знать, как написать его для совпадения без учета регистра.
Спасибо за любую помощь :-)
$cond. Так что нет$regex. - person JohnnyHK   schedule 21.01.2013