的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
"基于包含在搜索中。
答案 0 :(得分:2)
您需要创建文本索引以实现目标,然后从文本索引字段进行搜索。 mongo shell命令为product_name
字段
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。