2014-07-21 37 views
2

我的應用有以下堆棧:蒙戈通過正則表達式發現:只返回匹配的字符串

西納特拉關於Ruby - > MongoMapper - > MongoDB的

的應用程序將幾個條目在數據庫中。爲了交叉到其他頁面,我添加了某種語法。例如:

咖啡是由咖啡豆製成的黑色咖啡因液體。 {茶}由葉子製成。這兩種飲品有時會與{milk}一起享用

在此示例中,{茶葉}將鏈接到另一個關於茶的數據庫條目。

我想查詢我的所有'鏈接條款'我的mongoDB。通常在紅寶石我會做這樣的事情:/{([a-zA-Z0-9])+}/其中()將返回一個匹配的字符串。但是在mongo中,我獲得了整個記錄。

如何讓mongo只返回我正在查找的記錄的匹配部分。因此,對於上面的例子,它將返回:

["Tea", "milk"] 

我試圖避免拉扯整個記錄到Ruby和處理他們那裏

回答

1

我不知道如果我理解。

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

如果你不想有重複的tot使用$addToSet

+0

謝謝!這將返回整個字段條目。因此,對於我的例子,它會返回'''咖啡是由咖啡豆製成的黑色咖啡因液體。 {茶}由葉子製成。有時兩種飲料都可以享用{牛奶}'''。我們只能提取'''茶'''和'''牛奶'''嗎? –

+0

也許你可以試用$或$或$和 '$ match:{$或:[{'name':/ Tea/i},{'name':{$ regex:'milk',$ options:'這些是兩種方式$ regex 看看這個http://docs.mongodb.org/manual/core/index-text/ – Barno

+0

我有一個類似的問題。有沒有人找到解決方案?我找不到Stackoverflow上的任何東西。 – user1419243