Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 希望mongo查询执行字符串regex start&&;包含&&;结束_Mongodb_Mongodb Query - Fatal编程技术网

Mongodb 希望mongo查询执行字符串regex start&&;包含&&;结束

Mongodb 希望mongo查询执行字符串regex start&&;包含&&;结束,mongodb,mongodb-query,Mongodb,Mongodb Query,我想用regex进行mongo查询,它将返回文档 名称匹配以“abc”开头,并 名称匹配包含“efg”和 名称匹配以“ijk”结尾 var start = 'abc[\\s\\S]*'; var cont = '[\\s\\S]*efg[\\s\\S]*'; var end = '[\\s\\S]*ijk'; db.getCollection().find({ "$and":[ { "name":{"$regex":new RegExp('^' + start

我想用regex进行mongo查询,它将返回文档

名称匹配以“abc”开头,并

名称匹配包含“efg”和

名称匹配以“ijk”结尾

var start =  'abc[\\s\\S]*';
var cont =  '[\\s\\S]*efg[\\s\\S]*';
var end =  '[\\s\\S]*ijk';

db.getCollection().find({
 "$and":[
    {
        "name":{"$regex":new RegExp('^' + start + '$', 'i')}
    },
    {
        "name":{"$regex":new RegExp('^' + cont + '$', 'i')}
    },
    {
        "name":{"$regex":new RegExp('^' + end + '$', 'i')}
    }]
})

这运行非常慢,需要一些更好的查询或建议…

此集合上是否有索引?。一旦在字符串末尾放置了一个要匹配的
$
,则“不能使用索引”。与所有数据库一样,MongoDB只能从字符串的“开头”使用索引进行高效搜索。如果您需要匹配字符串的“部分”,那么尝试“标记化”并将单个单词拆分为一个数组,然后匹配这些单词。使用相等匹配或
$regex
“仅从字符串开头开始”。其他的,扫描整个集合。@dilsingi是的,我已经创建了索引…@NeilLunn,但在我的例子中,我不能将它按空格拆分为一个单词,因为它是一个没有空格的完整单词。此查询输入将来自用户,因此我们无法确定任何内容…是否可以将所有条件合并到一个正则表达式?示例:abcefgijk结果:{abc}ddddd{efg}zzzzz{ijk}