Node Js - 来自字符串数组的Mongo动态查询

时间:2013-04-09 10:30:13

标签: asp.net node.js mongodb mongoose

我有一个像['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"
 ]
}

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

1 个答案:

答案 0 :(得分:2)

使用$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匹配单词边界,因此正则表达式将匹配'非常好的平底鞋',但不匹配'非常好的flatshoes'