如何按条件聚合结果

How to aggregate a result by condition

我有一个集合,我需要根据这个集合计算一个分数,就这么简单。

计算我集合中所有学生的分数 如果学生属于 class 'A' 或 'B' 他得到 5 分 如果他属于 class 'C' 或 'D' 他得到4

学生:

{
    name:"Aster",
    classes:['A','B']
}

聚合不允许 $cond 上的 $in 运算符,所以我该如何继续

ps:打扰了。随时随地发送简短信息

不确定这是否可以完全解决您的问题,但您可以在 Mongo 2.6:

中使用 $setIsSubset
db.collection.aggregate([
   { $project: { name: 1 , 
                 grade: { $cond: [{$setIsSubset: ["$classes", ["A","B"]]}, 5, 4]}     
               } 
   }])

如果 classes 可以是字符串或数组:

db.collection.aggregate([
   { $project: { name: 1 , 
                 grade: {$cond: [{$or: [{$eq: ["$classes", "A"]}, 
                                        {$eq: ["$classes", "B"]}, 
                                        {$setIsSubset: ["$classes", ["A","B"]]}]}, 
                                 5, 4]}     
               } 
   }])