Der folgende Code ist ein Ereignis zum Sammeln von Informationen über Ausgaben und Aufgaben in einer Rechnungsdatenbank. Jedes Mal, wenn ich diesen Prozess durchführe, erhalte ich 2 Einträge in die Rechnungsdatenbank. Der erste Eintrag ist immer leer und der zweite hat die gewünschten Einträge.Meteor erhält doppelten Einsatz auf Mongo-Datenbank
'click .ConfirmCloseCase': function (event) {
var caseID = Session.get('CurrentClosingCaseID');
var TasksToChange = Tasks.find({caseID:caseID,done:true,billed:false});
var ExpensesToChange = Expenses.find({caseID:caseID,billed:false});
// Create new Entry into bills Database
Bills.insert({"expensestotal":0,"taskstotaltime":0}, function(error, result) {
// Set all Tasks to billed
TasksToChange.forEach(function(task){
Tasks.update(task._id, {$set: {"billed": true} })
Meteor.call('BillsUpsert', result, {$push: {"tasks": task._id}});
Meteor.call('BillsUpsert', result, {$inc: {"taskstotaltime": task.hours}});
})
// Set all Expenses to billed
ExpensesToChange.forEach(function(expense){
Expenses.update(expense._id, {$set: {"billed": true} })
Meteor.call('BillsUpsert', result, {$push: {"expenses": expense._id}});
Meteor.call('BillsUpsert', result, {$inc: {"expensestotal": expense.amount}});
})
Router.go('/Bills');
})
},
Der Meteor Anruf ist wie so:
Meteor.methods({
BillsUpsert: function(id, doc){
Bills.update(id, doc);
}
});
denke, meine es, dass ich zwei Einträge in die Datenbank bekommen ist, weil der Code asynchron ausgeführt wird. Ist das eine korrekte Annahme? ... und als Nachfolge gibt es eine "einfache" Lösung? :)
danke für Ihre Bemühungen @ Michael Floyd. Bitte sehen Sie meine Antwort. Ich bin wirklich sry dafür, deine Zeit zu verschwenden. Ich habe meine Inserts und Updates in Client-Code aufgrund einer Kombination von aldeed großen Paketen: Collection2, simpleschema etc .. – Gsuz