Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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,搜索字符串的最小长度_Mongodb_Mongoose - Fatal编程技术网

文本索引MongoDB,搜索字符串的最小长度

文本索引MongoDB,搜索字符串的最小长度,mongodb,mongoose,Mongodb,Mongoose,我已经从mongo shell为集合X创建了一个文本索引 db.X.ensureIndex({name: 'text', cusines: 'text', 'address.city': 'text'}) 现在,如果name属性的值为的文档为,则其长度为7 因此,如果我运行find查询(搜索字符串的长度为6),那么它将返回文档 现在我的问题是搜索字符串是否有一些最小长度限制来获取记录。 如果是,那么有没有办法改变它 MongoDB$text搜索不支持部分匹配。MongoDB支持对字符串内容的文

我已经从mongo shell为集合X创建了一个文本索引

db.X.ensureIndex({name: 'text', cusines: 'text', 'address.city': 'text'})
现在,如果name属性的值为的文档为,则其长度为7

因此,如果我运行find查询(搜索字符串的长度为6),那么它将返回文档

现在我的问题是搜索字符串是否有一些最小长度限制来获取记录。
如果是,那么有没有办法改变它

MongoDB
$text
搜索不支持部分匹配。MongoDB支持对字符串内容的文本搜索查询,并支持大小写不敏感和词干分析

看看你的例子:

// this returns nothing because there is no inferred association between 
// the value: 'seasons' and your input: 'seaso'
db.X.find({$text: {$search: 'seaso'}})

// this returns a match because 'season' is seen as a stem of 'seasons'
db.X.find({$text: {$search: 'season'}})
因此,这不是一个与输入长度有关的问题。在seaso上搜索不返回匹配项,因为:

  • 您的文本索引不包含整个单词:
    seaso
  • 您的文本索引不包含
    seaso
    为可识别词干的整个单词
这假定文本索引的语言是英语,您可以通过运行
db.X.getIndexes()
来确认这一点,您将在文本索引的定义中看到这一点:

"default_language" : "english"
FWIW,如果索引不区分大小写,则以下内容也将返回匹配项:

db.X.find({$text: {$search: 'SEaSON'}})
db.X.find({$text: {$search: 'SEASONs'}})
更新1:回答这个问题“是否可以使用RegExp”

假设
name
属性包含值
seasures
,并且您正在使用
seaso
搜索,则以下内容将与您的文档匹配:

db.X.find({type: {$regex: /^seaso/}})
更多详情请参阅,但

  • 这将不使用文本索引,因此如果您继续使用
    $regex
    运算符,则不需要文本索引
  • 使用
    $regex
    运算符的索引覆盖率可能不是您所期望的,简要总结如下:如果您的搜索值是锚定的(即
    seaso
    ,而不是
    easons
    ),则MongoDB可以使用索引,但在其他情况下不能使用

@AnkitKumar我已经更新了答案,添加了一个示例,展示了如何使用
$regex
。好的,那么就不需要文本索引了,我将使用RegExp和$or操作符使它在多个道具上工作。
db.X.find({type: {$regex: /^seaso/}})