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

问题描述 投票:3回答:2

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

Sinatra on Ruby - > MongoMapper - > MongoDB

该应用程序在数据库中放入了几个条目。为了交换到其他页面,我添加了某种语法。例如。:

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

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

我正在尝试查询我的mongoDB有关所有“链接术语”的信息。通常在红宝石中,我会做这样的事情:/{([a-zA-Z0-9])+}/,其中()将返回匹配的字符串。然而,在mongo,我获得了整个记录。

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

["Tea", "milk"]

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

mongodb sinatra mongomapper
2个回答
1
投票

我不知道我是否理解。

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

如果你不想在totuse $addToSet中有重复


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.