通过正则表达式查找Mongo:仅返回匹配的字符串

时间:2014-07-21 13:35:36

标签: mongodb sinatra mongomapper

我的应用程序有以下堆栈:

Ruby上的Sinatra - > MongoMapper - > MongoDB的

应用程序在数据库中放入了几个条目。为了与其他页面交叉,我添加了某种语法。 e.g:

  

咖啡是一种由豆制成的黑色含咖啡因的液体。 {茶}由叶子制成。这两种饮料有时都与{milk}

一起享用

在此示例中,{Tea}将链接到另一个关于茶的数据库条目。

我试图查询我的mongoDB有关所有链接的字词'。通常在ruby中我会这样做:/{([a-zA-Z0-9])+}/其中()将返回匹配的字符串。然而,在mongo,我得到了整个记录。

我怎样才能让mongo只返回我正在寻找的记录的匹配部分。因此,对于上面的示例,它将返回:

["Tea", "milk"]

我试图避免将整个记录拉入Ruby并在那里处理它们

2 个答案:

答案 0 :(得分:1)

我不知道我是否理解。

db.yourColl.aggregate([
{
    $match:{"yourKey":{$regex:'[a-zA-Z0-9]', "$options" : "i"}}
},
{
    $group:{
        _id:null,
        tot:{$push:"$yourKey"}
    }
}])

如果您不想在tot中使用$addToSet

重复

答案 1 :(得分:0)

我解决此问题的方法是使用字符串聚合命令来提取StartingIndexCP,结束indexCP和substrCP命令来提取我想要的字符串。由于您可以使用多个{},因此需要一个投影来一次识别这些CP索引,而另一个投影来提取所需的单词。希望这会有所帮助。