MongoDB使用另一个集合数组对文档进行排序

时间:2019-06-13 14:15:56

标签: mongodb mongoose

我将尽我所能解释我想达到的目标。

(注意:_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来说都不是那么好

请帮助!

1 个答案:

答案 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'
     }
   }
])