MongoDB中的JS部分文本搜索

时间:2019-07-10 13:13:25

标签: javascript mongodb

Env:

MongoDB (4.0.6) 

起初,我使用正则表达式搜索是这样的:

keyword = new RegExp(keyword, 'img');
query.$or = [
  { campaignTitle: keyword }
];

但主要问题是“关键字”,它只是输入值,如果用户使用特定的符号,它将破坏我的正则表达式... 为了解决此问题,我向集合中添加了文本索引,并开始使用像这样的文本搜索:

//Text Index creation:
db.collection('campaignmodel').createIndex({ campaignTitle: 'text' }, { background: true });

query.$or = [
    { $text: { $search: keyword } }
];

这是有效的,但对用户来说并不舒服,因为搜索无法按单词的一部分找到campaignTitle。

我已经调查了这些文档:

https://docs.mongodb.com/manual/text-search/ (重要的引号-“ $ text将使用空格和大多数标点符号作为分隔符来标记搜索字符串,并对搜索字符串中的所有此类标记执行逻辑或。”

MongoDB Full and Partial Text Search (也许它已经不是实际的信息了)

对于campaignTitle-“ testCompnew Copy 3/14/2019”

现在我可以使用以下输入找到它:

"Copy", "copy", "2019", "3/", "testCompnew" 

但不能使用以下输入:

"new", "test", "Comp"

是否可以仅用部分单词按MongoDB中的文本索引进行搜索?

1 个答案:

答案 0 :(得分:0)

Try it using $regex -- refer below link,

点击[此处](https://docs.mongodb.com/manual/reference/operator/query/regex/)!

---------------To use $regex, use one of the following syntaxes:-------------
{ <field>: { $regex: /pattern/, $options: '<options>' } }
{ <field>: { $regex: 'pattern', $options: '<options>' } }
{ <field>: { $regex: /pattern/<options> } }

In MongoDB, you can also use regular expression objects (i.e. /pattern/) to specify regular expressions:
{ <field>: /pattern/<options> }

***As an example: { <text>: /new/ }