2 回答
TA贡献1836条经验 获得超13个赞
可以使用聚合管道实现此目的,$filter
$match,以便您只考虑至少具有一种匹配成分的食谱
$addFields使用$filter创建字段,以消除从中查询的成分数组
OtherIngredient
Ingredients
$match只选择没有其他不良成分的食谱
$project删除临时字段
[
{$match: {Ingredients: {
$in: ["Eggs","Milk","Butter"]
}}},
{ $addFields: {
OtherIngredient: {
$filter: {
input: "$Ingredients",
cond: {$not: {$in: [
"$$this",
["Eggs","Milk","Butter"]
]}}
}
}
}},
{$match: {"OtherIngredient": []}},
{$project: {OtherIngredient: 0}}
])
TA贡献1833条经验 获得超4个赞
对不起,我不知道Golang,但这是你需要的(是新的MongoDB 4.4):$function
let filter = ["Eggs", "Milk", "Butter"];
db.recipes.find({
$expr: {
$function: {
body: function(ingredients, filter) {
for (let i = 0; i < ingredients.length; i++) {
if (filter.indexOf(ingredients[i]) < 0) return false;
}
return true
},
args: ["$Ingredients", filter],
lang: "js"
}
}
});
- 2 回答
- 0 关注
- 102 浏览
添加回答
举报