如果我有这个架构

food = {
    name : String,
    favouriteFoods : []
}


每个favouritefood元素都是这样的对象

var favoritefood = new Object;
favoritefood.cuisine = 'indian';
favoritefood.flavor = 'spicy';


是否可以查询猫鼬来获取所有最喜欢的食物对象的风味属性设置为“辣”?

最佳答案

您需要执行aggregate操作来获取所有按名称分组的辛辣食味食品。


Match所有食品,至少含有一种辛辣的食物。
Unwind最喜欢的食物阵列。
Match所有未发酵的辛辣食物。
Group按食物名称。
Project他们。


代码:

Food.aggregate([
{$match:{"favouriteFoods.flavor":"spicy"}},
{$unwind:"$favouriteFoods"},
{$match:{"favouriteFoods.flavor":"spicy"}},
{$group:{"_id":"$name","spicyFoods":{$push:"$favouriteFoods"}},
{$project:{"_id":0,"name":"$_id","spicyFoods":1}}
],function(err,res){
// console.log(res);
})

09-10 11:45