var mongoose = require('mongoose');
var Casenote = mongoose.model('Casenote');
var InvoiceSchema = new mongoose.Schema({
start_date: {type: Date},
end_date: {type: Date},
created_on: {type: Date, default: Date.now},
invoice_num: String,
month: String,
type: String,
provider_num: String,
rate_280: Number,
rate_285: Number,
rate_286: Number,
rate_287: Number,
rate_288: Number,
rate_290: Number,
qty_280: String,
qty_285: String,
qty_286: String,
qty_287: String,
qty_288: String,
qty_290: String,
total_280: Number,
total_285: Number,
total_286: Number,
total_287: Number,
total_288: Number,
total_290: Number
});
InvoiceSchema.pre('save', function(next) {
Casenote.aggregate([
{
$match: {
"created_on": {"$gte": new Date(this.start_date)},
"created_on": {"$lte": new Date(this.end_date)}
}
},
{
$group: {
_id: "$pov",
count: {$sum: 1}
}
}
], function(err, data) {
console.log(data);
});
next();
});
mongoose.model('Invoice', InvoiceSchema);
console.log(data)
возвращает правильную информацию.
Что я хочу сделать, это получить доступ к данным для настройки предварительно настроенных данных до того, как save
будет запущен на документе InvoiceSchema
.
В общем обратном вызове this
ссылается на объект глобального узла, а не на экземпляр InvoiceSchema
.
Как получить доступ к информации, возвращаемой агрегированием, и установить ее на this
, которая ссылается на экземпляр InvoiceSchema
?
Пример того, что я хотел бы сделать в функции обратного вызова:
data.map(function(doc) {
if(doc._id === 280) {
this.qty_280 = doc.count;
this.total_280 = doc.count * this.rate_280;
}
}
Это будет хорошо иметь 'следующий()' 'вне if' блока, так как рядом должен быть вызван для всех объектов, которые не соответствуют, если условия слишком –
Да, что я беспокойство' рядом() 'будет вызываться несколько раз? – zangw
Да, вы правы. Затем следующий должен быть перемещен за пределы 'data.map'. Спасибо –