Подтвердить что ты не робот

Группа (By) в Mongoose?

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

db.commentstreams.group({ key: { page_id: true }, reduce: function(obj,prev) { prev.num_comments += obj.num_comments }, initial: { num_comments: 0 } })

Я немного смущен синтаксисом Mongoose; возможно, кто-то мог пролить свет на этот. Огромное спасибо.

4b9b3361

Ответ 1

Согласно этот пост:

Model.find({}, [fields], {'group': 'FIELD'}, function(err, logs) { 
        ... 
}); 

К сожалению, для этого нам недостает документации.

Ответ 2

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

Вы можете получить доступ к любым функциям node -mongodb-native через moongoose, поэтому он выглядит так:

var group = {
   key: {},
   cond: {item_id: item_id},
   reduce: function(doc, out) {
      out.count++;
      out.total += doc.value;
   },
   initial: {
       total: 0,
       count: 0
   },
   finalize: function(out) {
       out.avg = out.total / out.count;
   }
};

Item.collection.group(group.key, group.cond, group.initial, group.reduce, group.finalize, true, function(err, results) {
    console.log('group results %j', results);
});

node -mongodb-native source: https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js#L1165

Досье группы MongoDB: http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group

Ответ 4

Я работал с подобным примером, надеюсь, это будет полезно

Register.aggregate(
[
  {
   $group: {_id: {campaign: "$campaign"}, quantity: {$sum: 1}}
},
  {
    $limit: 5
  },
  {
    $sort: {date: -1}
  }
], function (err, res) {
        console.log(res)
});