当存在 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
字符的字符串不被视为匹配的原因。
我正在使用 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
字符的字符串不被视为匹配的原因。