如何在 Nodejs 和 Mongodb 中包含搜索
Posted
技术标签:
【中文标题】如何在 Nodejs 和 Mongodb 中包含搜索【英文标题】:How to do contain search in Nodejs And Mongodb 【发布时间】:2017-04-15 21:37:30 【问题描述】: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
”。
【问题讨论】:
不确定您的要求。您希望“BISCUITS COMPLAN”找到所有包含 BISCUITS 或 COMPLAN 的产品?还是两者都没有具体顺序? 您是否尝试过类似的解决方案:http://***.com/questions/3305561/how-do-i-query-mongodb-with-like @SimonPA 我有一个商品名为 complan 牛奶饼干 100gm。如果我用关键字 Complan 搜索,它会得到该商品。但如果我用 Biscuits Complan 搜索,它没有找到那个项目。如果我们使用关键字 Biscuits Complan 进行搜索,我需要找到该项目。 由于您明确搜索“search_key”somewhere(这就是您在形成正则表达式之前和之后添加.*
时所做的),您将永远无法将“complan milk biscuits 100gm”与该字符串不包含的搜索词匹配。
【参考方案1】:
您需要创建文本索引以实现您的目标,然后从文本索引字段中搜索。 mongo shell 命令为product_name
字段创建text index
db.colectionName.createIndex( product_name: "text" );
然后您可以使用 $text
和 $search
进行搜索。 doc
db.collectionName.find( $text: $search: "BISCUITS COMPLAN" );
不需要使用new RegExp(
,可以使用like:
Item.find( $text: $search: req.params.search_key ).exec(function (err, items)
console.log(items) );
);;
【讨论】:
【参考方案2】:您需要为此使用$text
运算符。
所以而不是:
Item.find(product_name: search_key)...
类似:
Item.find(product_name: $text: $search: search_key)...
注意:您需要有一个text index。
【讨论】:
以上是关于如何在 Nodejs 和 Mongodb 中包含搜索的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 angular 和 nodejs 将 csv 数据转储到 mongoDB
如何使用 mongoose 和 NodeJs 在 Mongodb 的数组字段中插入数据
如何使用 nodejs / express 将数据存储在 mongodb 中?