我将尽我所能解释我想达到的目标。
(注意:_id是自动生成的)
让我们从我要查询的模式开始
cocktail: Schema =
name: { type: String },
ingredients: [{ type: ObjectId, ref: 'ingredient', required: true }]
只需说明一下,名字就是鸡尾酒的名字,配料是组成鸡尾酒的元素。
为简单起见,这是“成分”模式
ingredient: Schema =
name: { type: String }
简单干净。
假设我有一个用户集合,用户可以在其中选择自己喜欢的成分。供用户使用的配料可以为空。
user: Schema =
name: { type: String },
preferredIngredients: [{ type: ObjectId, ref: 'ingredient' }]
现在的问题:是否可以通过用户最喜欢的食材查询鸡尾酒收藏?
我尝试过使用(我是查找用户的先前查询)
db.cocktails.find({ ingredients: { $in: [me.preferredIngredients] }})
但是它从不返回数据。我的经验对mongo或mongooose来说都不是那么好
请帮助!
答案 0 :(得分:0)
是的,您应该使用$lookup mongo version 3.6+语法:
db.users.aggregate([
{
$lookup: {
from: "cocktails",
let: { ingredients: "$preferredIngredients" },
pipeline: [
{ $match:
{ $expr:
{ $setIsSubset : ["$ingredients", "$$ingredients"]},
}
}
],
as: 'matched_cocktails'
}
}
])