';比如';或MongoDB中$cond内的$regex查询
请仔细检查我的这个问题:';比如';或MongoDB中$cond内的$regex查询,regex,mongodb,mongodb-query,Regex,Mongodb,Mongodb Query,请仔细检查我的这个问题: 但是这一次,我需要比较字符串,而不是数字。大小写查询必须有一个类似于的: 当源为“%Web%”时,则为“Web” 然后我需要按来源分组。如何在Mongo中书写?我正在尝试以下操作,但不确定$regex内部是否支持$cond。顺便问一下,$cond中是否有有效运算符的列表?看起来,$cond不太喜欢我:) 还有很多其他的值我需要写进去,做一个更深的嵌套。为了简洁起见,这只是一个使用“Android”和“Web”的示例。我用$eq和$regex都试过了。使用$re
但是这一次,我需要比较字符串,而不是数字。
大小写
查询必须有一个类似于的:
当源为“%Web%”时,则为“Web”
然后我需要按来源分组。如何在Mongo中书写?我正在尝试以下操作,但不确定$regex
内部是否支持$cond
。顺便问一下,$cond
中是否有有效运算符的列表?看起来,$cond
不太喜欢我:)
还有很多其他的值我需要写进去,做一个更深的嵌套。为了简洁起见,这只是一个使用“Android”和“Web”的示例。我用$eq
和$regex
都试过了。使用$regex
会产生无效运算符的错误,而使用$eq
则无法理解regex表达式并将所有内容置于“其他”下。如果这在正则表达式中是可能的,请让我知道如何为不区分大小写的匹配编写它
谢谢你的帮助:-)也许你可以用MapReduce试试
var map = function()
{
var reg1=new RegExp("(Android)+");
var reg2=new RegExp("(web)+");
if (reg1.test(this.source)){
emit(this._id,'Android');
}
else if (reg2.test(this.source))
{
emit(this._id,'web');
}
}
var reduce = function (key,value){
var reduced = {
id:key,
source:value
}
return reduced;
}
db.Twitter.mapReduce(map,reduce,{out:'map_reduce_result'});
db.map_reduce_result.find();
您可以使用JavaScript正则表达式代替MongoDB$regex。好吧,它似乎还没有计划好要实现:(
我使用的是2.6,并浏览了一下3.0,但它并不存在
不过有一个解决办法,如果你能将问题投射到一个稳定的子字符串上。然后你可以$substr字段并使用多个嵌套的$cond。这很难,但它可以工作。你只能对$cond
的第一个参数使用该值作为布尔值。所以没有$regex
。哦:(我在我的一个查询中成功地使用了$eq inside$cond.。但是这是一个“LIKE”查询。.没有解决方法吗?也许我需要在聚合之前单独清理数据。.你能再开发一点解决方法吗,有点不清楚…谢谢!首先我用$substr来预测值,例如,给我0-10个字符的t这个字符串,然后我检查是否相等,这在$cond中是可能的。所谓“稳定”是指子字符串在检查字符串中的稳定位置。但从那时起,我们将它重写为Spark。好的,谢谢。所以它不是一个真正的Regexp,我理解。不,Regexp是不可能的,它只是一个非常特殊的情况下的解决方法。
var map = function()
{
var reg1=new RegExp("(Android)+");
var reg2=new RegExp("(web)+");
if (reg1.test(this.source)){
emit(this._id,'Android');
}
else if (reg2.test(this.source))
{
emit(this._id,'web');
}
}
var reduce = function (key,value){
var reduced = {
id:key,
source:value
}
return reduced;
}
db.Twitter.mapReduce(map,reduce,{out:'map_reduce_result'});
db.map_reduce_result.find();