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


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

最佳答案

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

07-26 09:35