如何按条件聚合结果

时间:2015-01-09 04:50:03

标签: mongodb mongodb-query aggregation-framework

我有一个基于此的集合,我需要计算一个简单的分数。

计算我的收藏中所有学生的分数 如果一个学生属于'A'或'B'级别,如果他属于'C'或'D'级别,他得到5分,那么他得到4分

学生:

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

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

PS:借口。在旅途中发送简洁

1 个答案:

答案 0 :(得分:4)

不确定这可以完全解决您的问题,但您可以在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]}     
               } 
   }])