Допустим, у меня есть коллекция документов, которая выглядит следующим образом (упрощенный пример, но он должен показывать схему):
> db.data.find()
{ "_id" : ObjectId("4e9c1f27aa3dd60ee98282cf"), "type" : "A", "value" : 11 }
{ "_id" : ObjectId("4e9c1f33aa3dd60ee98282d0"), "type" : "A", "value" : 58 }
{ "_id" : ObjectId("4e9c1f40aa3dd60ee98282d1"), "type" : "B", "value" : 37 }
{ "_id" : ObjectId("4e9c1f50aa3dd60ee98282d2"), "type" : "B", "value" : 1 }
{ "_id" : ObjectId("4e9c1f56aa3dd60ee98282d3"), "type" : "A", "value" : 85 }
{ "_id" : ObjectId("4e9c1f5daa3dd60ee98282d4"), "type" : "B", "value" : 12 }
Теперь мне нужно собрать некоторую статистику по этой коллекции. Например:
db.data.mapReduce(function(){
emit(this.type,this.value);
},function(key,values){
var total = 0;
for(i in values) {total+=values[i]};
return total;
},
{out:'stat'})
будет собирать итоги в коллекции 'stat'.
> db.stat.find()
{ "_id" : "A", "value" : 154 }
{ "_id" : "B", "value" : 50 }
На данный момент все идеально, но я остановился на следующем шаге:
Итак, вопрос:
Можно ли каким-либо образом выбрать только документы, добавленные после последнего mapReduce, для запуска инкрементного mapReduce или Может быть, есть другая стратегия обновления статистических данных по постоянно растущей коллекции?