阻止mongodb忽略特殊字符?

阻止mongodb忽略特殊字符?,mongodb,Mongodb,返回包含“text”的所有内容,而不仅仅是带有“#text”的文档。我试着在#前面加一个\,但没有用。如何阻止mongodb忽略我的特殊角色?谢谢 Tomalak对文本索引工作原理的描述是正确的,但实际上您可以使用文本索引对具有特殊字符的短语进行索引: Model.find({ $text : {$search: "#text"} }) 精确的短语匹配通过在短语周围加上双引号来表示,需要像“\”text\”一样在shell中转义 文本索引比普通索引大,但如果要进行大量不区分大小写的精确短语匹配

返回包含“text”的所有内容,而不仅仅是带有“#text”的文档。我试着在#前面加一个\,但没有用。如何阻止mongodb忽略我的特殊角色?谢谢

Tomalak对文本索引工作原理的描述是正确的,但实际上您可以使用文本索引对具有特殊字符的短语进行索引:

Model.find({ $text : {$search: "#text"} })
精确的短语匹配通过在短语周围加上双引号来表示,需要像
“\”text\”
一样在shell中转义

文本索引比普通索引大,但如果要进行大量不区分大小写的精确短语匹配,那么它们可能比标准索引更好,因为它们的性能更好。例如,在索引为
{“t”:1}
的字段
t
上,有一个完全匹配的正则表达式

> db.test.drop()
> db.test.insert({ "_id" : 0, "t" : "hey look at all this #text" })
> db.test.insert({ "_id" : 1, "t" : "text is the best" })
> db.test.ensureIndex({ "t" : "text" })

> db.test.count({ "$text" : { "$search" : "text" } })
2
> db.test.count({ "$text" : { "$search" : "#text" } })
2

> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }
执行完全索引扫描。类似(但不是等效)文本查询

> db.test.find({ "t" : /#text/ })
将使用文本索引查找包含术语
“text”
的文档,然后扫描所有这些文档以查看它们是否包含完整短语
“#text

要小心,因为文本索引不区分大小写。继续上面的例子:

> db.test.find({ "$text" : { "$search" : "\"#text\"" } })

可能重复的
$text
是全文搜索。它不适用于精确的子字符串匹配,它搜索单词形式和短语,就像搜索引擎一样。使用are regex进行精确匹配。如果我搜索“xtext”,那么带有“text”的文档不会显示,为什么“#text”的文档会不同?因为正如我所说,
$text
是全文搜索。它将字符串分解为单词,并将这些单词(以及单词形式,以便
'text'
'text'
是同一事物)存储在索引中。然后可以搜索该索引<代码>'text'和
'xtext'
最后作为单独的单词结束<另一方面,“文本”将被分解为
“文本”
,因为全文索引忽略符号。很好,我不认为
$text
可以这样使用。很高兴知道。如果有一种方法可以做多个搜索短语?搜索“text-othertext”将返回包含text或othertext的文档,是否可以使用精确的搜索短语?
> db.test.insert({ "_id" : 2, "t" : "Never seen so much #TEXT" })

> db.test.find({ "t" : /#text/ })
{ "_id" : 0, "t" : "hey look at all this #text" }

> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }
{ "_id" : 2, "t" : "Never seen so much #TEXT" }