我将配方保存在数据库中,每个配方都有类型Text
的配料字段。到查询中,我传递了一系列成分,例如:
Array
,我想在db的配料字段中找到所有配方,每个配方都传递给查询。问题是传递给查询的成分通常是数据库中成分的子字符串,因此,例如,数据库中的文档的成分数组中可以包含“ 1个成熟的香蕉”,而在查询中我传递“ banana”,这意味着此文件应返回有结果。结果文件应包括通过的每种成分。
我确实设法使用此方法找到了所有食谱,包括至少 代码:
["banana", "apple", "watermelon"]
但是如何进行查询,其中每个结果都包含所有传递给查询的成分(以子字符串的形式)?
答案 0 :(得分:1)
您可以通过更改正则表达式来以其他方式实现这一目标。
从req.query.ingredients
(例如["banana", "apple", "watermelon"]
)遍历数组并编写此regEx:
(?=.*banana)(?=.*apple)(?=.*watermelon).+
以下几行内容:
const ing = ["banana", "apple", "watermelon"]
const result = `${ing.reduce((r,c) => r.concat(`(?=.*${c})`), "")}.+`
console.log(result)
这是使用正向预测,如果在食谱中找到所有成分,则将匹配。这还应该消除使用Promise.all
的需要,因为您只需要一个mongoDB find
查询。
您可以测试regEx here
还要确保您通过$options
使用mongo进行不区分大小写的搜索:
{'$regex' : '<YOUR-REGEX>', '$options' : 'i'}
否则,如果有人真的BANANAS
关于您的一种食谱中的成分……您将不会找到它:)