如何在 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 中?

如何在数组中查找数据 mongodb , nodejs

如何在 MongoDB 中为 NodeJS Express 应用程序存储站点配置?

NodeJS 和 MongoDB 单元测试