当存在反斜杠\换行符时,带正则表达式的Mongo查询失败

时间:2015-02-15 17:52:55

标签: mongodb sails.js sails-mongo

我正在使用带有Sails的MongoDB。

db.post.find( { body:  {"$regex" : /^.*twitter.*$/i }}).

此查询应该只查找在其正文字段中包含“twitter”的帖子。 由于某些原因,如果字段中存在反斜杠(如换行符),则无法找到匹配项。

这是否已知?我该怎么办呢?

以下是展示问题的两个示例:

上面的find-command返回了 这个文件:

{ 
    "_id" : ObjectId("54e0d7eac2280519ac14cfda"), 
    "title" : "Cool Post", 
    "body" : "Twitter Twitter twitter twittor"
}

上面的find-command返回了 这个文件:

{ 
    "_id" : ObjectId("54e0d7eac2280519ac14cfdb"), 
    "title" : "Cool Post with Linebreaks", 
    "body" : "This is a cool post with Twitter mentioned into it \n Foo bar"
}

1 个答案:

答案 0 :(得分:2)

  

这是否已知?

没有。这不是MongoDb搜索引擎的问题。

  

我该怎么办?

您可以将Regular Expression更改为:

var regex = new RegExp("twitter","i");
db.posts.find( { body:  regex});

您的代码存在的问题是小数点.

根据doc

  

.

     

(小数点)匹配除换行符之外的任何单个字符   字符。

这就是为什么带有newline字符的字符串不会被视为匹配。