如何在MongoDB中使用regexp查找word中的所有值?

如何在MongoDB中使用regexp查找word中的所有值?,regex,mongodb,mongodb-query,Regex,Mongodb,Mongodb Query,假设我在MongoDB文档中有以下字符串: {"name": "space delimited string"} 我需要使用regexp构建mongodb查询,通过输入以下搜索请求来查找此文档: 空格字符串 它看起来像RDBS中的操作符。我知道最新的MongoDB 3带有全文搜索功能,但由于当前版本过时,我需要regexp 请帮助我使用regexp构造mongodb查询,通过输入上面的搜索来查找文档 谢谢在我看来,有两种选择 如果你对所有单词的意思是“和”,那么使用积极的前瞻: {“name”

假设我在MongoDB文档中有以下字符串:

{"name": "space delimited string"}
我需要使用
regexp
构建mongodb查询,通过输入以下搜索请求来查找此文档:

空格字符串

它看起来像RDBS中的
操作符。我知道最新的MongoDB 3带有全文搜索功能,但由于当前版本过时,我需要
regexp

请帮助我使用
regexp
构造mongodb查询,通过输入上面的搜索来查找文档


谢谢

在我看来,有两种选择

如果你对所有单词的意思是“和”,那么使用积极的前瞻:

{“name”:/(?=.*\bspace\b)(?=.*\bstring\b)。+/}
或者,如果操作员更适合您:

{“name”:{“$all”:[/\bspace\b/,/\bstrig\b/]}
如果你对中的任何一个表示“或”,那么你可以:

{“name”:/\bspace\b |\bstring\b/}
或使用运算符:

{“name”:{“$in”:[/\bspace\b/,/\bstring\b/]}
注意,在所有情况下,您都可能希望其中的
\b
边界匹配来界定“单词”,否则您将得到“部分”单词

所以这取决于你的意思是什么,什么最适合你。您可以使用自己的syntaxt表示“AND”或“or”来构造正则表达式,或者您也可以使用等效的MongoDB逻辑表达式(
$all
$in
)来代替正则表达式的“list”

因此,为regex构建一个字符串或构建一个列表。你的选择


当然,为了进行处理,您需要将字符串“分解”为“单词”。此处缺少语言标记,但作为JavaScript示例:

作为“AND”的单个正则表达式

var searchString=“空格字符串”;
var表达式=新的RegExp(
“”+searchString.split(“”).map(函数(word){
返回“(?=。\\b”+word+“\\b)”
}).join(“”+“)
)
变量查询={“名称”:表达式};
或对于单个表达式上的“或”条件

var expression=new RegExp(
searchString.split(“”).map(函数(word){
返回“\\b”+word+“\\b”
}).加入(“|”)
);
变量查询={“名称”:表达式};
或作为表达式列表:

var type=“AND”,
查询={“名称”:{};
//表达式列表
var list=searchString.split(“”).map(函数(word){
返回新的RegExp(“\\b”+word+“\\b”)
});
//根据类型确定运算符
query.name[(type==“AND”)?“$all”:“$in”]=list;

在我看来,有两种选择

如果你对所有单词的意思是“和”,那么使用积极的前瞻:

{“name”:/(?=.*\bspace\b)(?=.*\bstring\b)。+/}
或者,如果操作员更适合您:

{“name”:{“$all”:[/\bspace\b/,/\bstrig\b/]}
如果你对中的任何一个表示“或”,那么你可以:

{“name”:/\bspace\b |\bstring\b/}
或使用运算符:

{“name”:{“$in”:[/\bspace\b/,/\bstring\b/]}
注意,在所有情况下,您都可能希望其中的
\b
边界匹配来界定“单词”,否则您将得到“部分”单词

所以这取决于你的意思是什么,什么最适合你。您可以使用自己的syntaxt表示“AND”或“or”来构造正则表达式,或者您也可以使用等效的MongoDB逻辑表达式(
$all
$in
)来代替正则表达式的“list”

因此,为regex构建一个字符串或构建一个列表。你的选择


当然,为了进行处理,您需要将字符串“分解”为“单词”。此处缺少语言标记,但作为JavaScript示例:

作为“AND”的单个正则表达式

var searchString=“空格字符串”;
var表达式=新的RegExp(
“”+searchString.split(“”).map(函数(word){
返回“(?=。\\b”+word+“\\b)”
}).join(“”+“)
)
变量查询={“名称”:表达式};
或对于单个表达式上的“或”条件

var expression=new RegExp(
searchString.split(“”).map(函数(word){
返回“\\b”+word+“\\b”
}).加入(“|”)
);
变量查询={“名称”:表达式};
或作为表达式列表:

var type=“AND”,
查询={“名称”:{};
//表达式列表
var list=searchString.split(“”).map(函数(word){
返回新的RegExp(“\\b”+word+“\\b”)
});
//根据类型确定运算符
query.name[(type==“AND”)?“$all”:“$in”]=list;