2015-11-21 2 views
1

Я пытаюсь подсчитать количество голосов за вопрос для следующей схемы.Получить длину массива в массиве mongodb

[ 
    { 
    "_id": "564b9e13583087872176dbd2", 
    "question": "fav NFL team", 
    "choices": [ 
     { 
     "text": "St. Louis Rams", 
     "_id": "564b9e13583087872176dbd7", 
     "votes": [ 
      { 
      "ip": "::ffff:192.168.15.130", 
      "_id": "564b9e30583087872176dbd8" 
      }, 
      { 
      "ip": "::ffff:192.168.1.1", 
      "_id": "564bb355e4e1b7200da92668" 
      } 
     ] 
     }, 
     { 
     "text": "Oakland Raiders", 
     "_id": "564b9e13583087872176dbd6", 
     "votes": [ 
      { 
      "ip": "::ffff:192.168.1.135", 
      "_id": "564bb273e4e1b7200da92667" 
      } 
     ] 
     }, 
     { 
     "text": "Denver Broncos", 
     "_id": "564b9e13583087872176dbd5", 
     "votes": [] 
     }, 
     { 
     "text": "Kansas City Chiefs", 
     "_id": "564b9e13583087872176dbd4", 
     "votes": [ 
      { 
      "ip": "::ffff:192.168.1.100", 
      "_id": "564bab48e4e1b7200da92666" 
      } 
     ] 
     }, 
     { 
     "text": "Detroit Lions", 
     "_id": "564b9e13583087872176dbd3", 
     "votes": [ 
      { 
      "ip": "::ffff:192.168.15.1", 
      "_id": "564b9f41583087872176dbd9" 
      } 
     ] 
     } 
    ] 
    } 
] 

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

db.polls.aggregate([{$unwind: '$choices'}, {$group:{_id:'$_id', 'sum':{$sum:1}}}]) 

Подсчет голосов за «избры NFL команды» будет 5.

Кроме того, для справки вот мой мангуст код, который генерируется схемой

var mongoose = require('mongoose'); 
var voteSchema = new mongoose.Schema({ 
    ip: 'String' 
}); 
var choiceSchema = new mongoose.Schema({ 
    text: String, 
    votes: [voteSchema] 
}); 
exports.PollSchema = new mongoose.Schema({ 
    question: { 
     type: String, 
     required: true 
    }, 
    choices: [choiceSchema] 
}); 
+0

пожалуйста, не оставляйте редактирования изображения на ваш вопрос, чтобы добавить документы – styvane

+0

извините, установил его – erebel55

ответ

0

Я понял, как это сделать это в манго, мне нужно было еще раз расслабиться.

db.polls.aggregate([ 
    {$unwind: '$choices'}, 
    {$unwind:'$choices.votes'}, 
    {$group:{ 
     _id:'$_id', 
     'sum':{ 
      $sum:1 
     } 
    }} 
]) 

А вот в мангуста

Poll.aggregate([ 
    {$unwind: '$choices'}, 
    {$unwind: '$choices.votes'}, 
    {$group:{ 
     _id: '$_id', 
     'sum': { 
      $sum:1 
     } 
    }} 
], function(err, result) { 
    if (err) { 
     console.log(err); 
    } 
    res.json(result); 
}); 
Смежные вопросы