2015-11-12 3 views
2

Я новичок в мире mongoDB. Я разрабатываю сайт на nodeJS с expressJS и mongoose как DB.

Я учусь графической ориентации, и я генерироваться БД с этим Modele :

var userSchema = new Schema({ 
    profile:{ 
     sexe:   String, // ('male' or 'female') 
     age:   String, // ('kid', 'adult', 'old') 
     rank:   String, // ('low', 'middle', 'high') 
    }, 
    design:{ 
     luminosity:  String, // ('light', 'dark') 
     color:   String, // ('blue', 'green', 'pink', 'orange') 
     shape:   String, // ('rounded', 'squared') 
     font:   String, // ('serif', 'sans serif') 
    } 
}); 

На другой странице, я хочу, чтобы отобразить некоторые статистические данные, для Exemple, на странице светимостью, где пользователь выбирает между светом или тьмой. Я хочу показать ему, что люди в основном выбирают.

Например, с секцией sexe: что в основном выбирает самку (например, 68% из них выбирают свет). Я думаю, что лучший способ получить все цифры для создания статистики - использовать агрегат.

Как новичок, он разрушает мой разум, чтобы генерировать идеальный запрос, я действительно потерялся в этой структуре!

Понравился бы ваш совет!

ответ

1

Операция агрегирования будет зависеть от оператора $cond на этапе трубопровода $group, чтобы оценить количество на основе яркости страницы и/или цвета страницы. Используйте оператор аккумулятора в $sum вернуть сумму на каждой оцениваемой группы, что-то вроде следующего:

var pipeline = [  
    { 
     "$group": { 
      "_id": "$profile.sexe",    
      "light_count": { 
       "$sum": { 
        "$cond": [ { "$eq": [ "$design.luminosity", "light" ] }, 1, 0 ] 
       } 
      }, 
      "dark_count": { 
       "$sum": { 
        "$cond": [ { "$eq": [ "$design.luminosity", "dark" ] }, 1, 0 ] 
       } 
      }, 
      "blue_count": { 
       "$sum": { 
        "$cond": [ { "$eq": [ "$design.color", "blue" ] }, 1, 0 ] 
       } 
      }, 
      "green_count": { 
       "$sum": { 
        "$cond": [ { "$eq": [ "$design.color", "green" ] }, 1, 0 ] 
       } 
      }, 
      "pink_count": { 
       "$sum": { 
        "$cond": [ { "$eq": [ "$design.color", "pink" ] }, 1, 0 ] 
       } 
      }, 
      "orange_count": { 
       "$sum": { 
        "$cond": [ { "$eq": [ "$design.color", "orange" ] }, 1, 0 ] 
       } 
      }    
     } 
    }, 
    { 
     "$project": { 
      "_id": 0, "gender": "$_id",    
      "luminosity": { 
       "light": "$light_count", 
       "dark": "$dark_count" 
      }, 
      "color": { 
       "blue": "$blue_count", 
       "green": "$green_count", 
       "pink": "$pink_count", 
       "orange": "$orange_count" 
      } 
     } 
    } 
]; 

User.aggregate(pipeline) 
    .exec(function (err, result){ 
     // handle error 
     if (err) throw Error; 
     console.log(result); 
    }) 
+1

Спасибо человек. Вы настоящий художник! Кажется, вам будет легко, но я многому научусь! –

+1

@PaulJobard Не волнует Пол, рад помочь :) – chridam

Смежные вопросы