';比如';或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();