请回答我的这个问题:
MongoDB $group and explicit group formation with computed column
但这一次,我需要比较的是字符串,而不是数字。CASE
查询必须有一个LIKE
:
CASE WHEN source LIKE '%Web%' THEN 'Web'
然后我需要按来源分组。如何在 Mongo 中写这个?我正在尝试以下方法,但不确定 $cond
中是否支持 $regex
。顺便说一句,在某处的 $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
不理解正则表达式并将所有内容置于“其他”下。如果使用正则表达式可以做到这一点,请告诉我如何编写它以进行不区分大小写的匹配。
感谢您的帮助:-)
最佳答案
好吧,它似乎仍然没有计划实现:( https://jira.mongodb.org/browse/SERVER-8892
我正在使用 2.6,并查看了 3.0,但它不存在。
不过,如果您可以将问题转换到稳定的子字符串上,则有一种解决方法。然后你可以 $substr 字段并使用多个嵌套的 $cond。这很尴尬,但它有效。
https://stackoverflow.com/questions/14441801/
相关文章:
mongodb - 对大量数据使用 Mongo 地理空间查询
mongodb - .NET 驱动程序与 LINQ : NotSupportedException:
mongodb - 使用 pymongo 将 MongoDB 导出为 CSV
python - 如何让 django celery 写入测试数据库以进行功能测试?
mongodb - 使用 SSL 的 mongodump 和 mongorestore
java - 在等待与 WritableServerSelector 匹配的服务器时超时 30000
mongodb - Mongoid 没有服务器可用匹配首选项