如何在Nodejs和Mongodb

时间:2016-12-01 09:54:38

标签: regex node.js mongodb mongoose mongodb-query

的NodeJS

search_key = new RegExp('.*' + req.params.search_key + '.*', 'i');
Item.find({product_name:search_key}).exec(function (err, items) {
    console.log(items) );
});

在这里,我可以使用 search_key 搜索产品名称。但我的问题是,我的产品名称是" COMPLAN MILK BISCUITS 100GM"。如果我使用" BISCUITS COMPLAN"进行搜索,则找不到该产品。我需要找到" BISCUITS COMPLAN"和" COMPLAN BISCUITS"基于包含在搜索中。

2 个答案:

答案 0 :(得分:2)

您需要创建文本索引以实现目标,然后从文本索引字段进行搜索。 mongo shell命令为product_name字段

创建text index
db.colectionName.createIndex( { product_name: "text" } );

然后您可以使用$text$search进行搜索。 doc

db.collectionName.find({ $text: { $search: "BISCUITS COMPLAN" } });

无需使用new RegExp(就可以使用:

Item.find({ $text: { $search: req.params.search_key } }).exec(function (err, items) {
    console.log(items) );
});;

答案 1 :(得分:0)

您需要使用$text运算符。

所以而不是:

Item.find({product_name: search_key})...

类似的东西:

Item.find({product_name: {$text: {$search: search_key}}})...

注意:您需要text index