Vì MongoDB có thể gọi hàm giảm nhiều lần, bạn phải đảm bảo Hàm Idempotence . Một chút sửa đổi trên chức năng giảm của bạn sẽ giải quyết được vấn đề:
db.system.js.save({
_id: "reduce1",
value: function (key, values) {
var reducedValue = [];
for (var i = 0; i < values.length; i++) {
for(var j = 0; j < values[i].data.length; j++) {
reducedValue.push({
"_id": values[i].data[j]._id,
"creation_time": values[i].data[j].creation_time
});
}
}
return {
data: reducedValue
};
}
});
Lưu ý rằng bây giờ các giá trị values[i].data
mảng cũng được duyệt qua, do trả về của reduce1
khác lệnh gọi nằm trong các giá trị values
mảng
.