【问题标题】:Node Js - Mongo dynamic query from string arrayNode Js - 来自字符串数组的 Mongo 动态查询
【发布时间】:2013-04-09 20:49:22
【问题描述】:

我有一个像['flat','flat shoes','shoes','black shoes'] 这样的字符串数组。

mongo 集合有一个名为 'KeyWords' 的字段,它是一个字符串。

我需要编写一个查询来获取带有“KeyWords”的元素,其中包含字符串数组中的任何项目。

示例集合

{
 "KeyWords" : [
         "MEN'S SMART SHOES- FIREBACK LEATHER SLIP ON SHOES TAN",
         "G670",
         "SMART SHOES",
         "FIREBACK SHOES",
         "SHOES"
 ]}
{
 "KeyWords" : [
         "MEN'S SMART SHOES- FIREBACK LEATHER SLIP ON SHOES TAN",
         "G670",
         "SMART SHOES",
         "FIREBACK SHOES",
         "SHOES"
 ]
}

任何人都可以建议如何实现这一点。

【问题讨论】:

  • 你用 asp.net、php、node.js 标记了这个问题。你确定你标记正确吗?
  • @rahularyansharma,这个要求是我使用 Node JS 的 ASP.Net 应用程序的一部分。标记为 PHP,因为大多数 PHP 开发人员都在使用 Mongo。以为我也可以从他们那里得到建议。

标签: asp.net node.js mongodb mongoose


【解决方案1】:

使用$in 进行完全匹配:

var keywords = ['flat','flat shoes','shoes','black shoes'];
YourModel.find({ KeyWords: { $in : keywords } }, ...);

对于子字符串匹配,您可以使用正则表达式查询:

var regexp = new RegExp("\\b(?:" + keywords.join("|") + ")\\b", "i"); // "i" means case insensitive
YourModel.find({ KeyWords : regexp }, ...);

\b 匹配单词边界,因此正则表达式将匹配 'very good flat shoes',但不匹配 'very good flatshoes'

【讨论】:

  • 感谢您的回复。如果我没记错的话,“$in”子句会查找完全匹配的内容。我需要获得具有关键字的元素,例如“非常好的平底鞋”。查找包含数组中任何项目的关键字。
  • 谢谢罗伯特。会试试这个,让你知道。
  • 罗伯特,我已经用示例集合编辑了我的问题。修改了我的集合以具有关键字数组。我正在尝试 $in 子句查询“KeyWords”:[{“$in”:searchParams }]。其中 searchParams 是一个数组。但它不会重新调整任何结果。在控制台中,查询看起来像 '{ KeyWords: [ { '$in': [Object] } ] }' 其中 Object 是字符串数组。
  • 您正在传递一个数组作为查询的值,但这需要是一个对象(所以不是[{ "$in": searchParams }],而是{ "$in": searchParams })。此外,$in 区分大小写:shoesSHOES 不匹配。我编辑了答案以使正则表达式搜索不区分大小写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多