当存在 backslash\newline 时,Mongo 使用正则表达式的查询失败

Mongo query with regex fails when backslash\newline are present

我正在使用 MongoDB 和 Sails。

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

此查询应该只查找正文字段中包含 'twitter' 的帖子。 出于某种原因,如果字段中存在反斜杠(如换行符),它将找不到匹配项。

这是众所周知的吗?我该怎么办?

这里有两个例子来说明这个问题:

此文档 上面的查找命令返回的:

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

此文档不是上面的查找命令返回的:

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

Is this known?

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

What can I do about it?

您可以将 Regular Expression 更改为:

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

你的代码的问题是小数点.

根据 doc,

.

(The decimal point) matches any single character except the newline character.

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