in meinem Server/server.jsMeteor: Könnte eine Race Condition mit Meteor.collections auf der Serverseite passieren?
Meteor.methods({
saveOnServer: function() {
var totalCount = Collections.find({
"some": "condition"
}).count();
if (totalCount) {
var customerId = Collections.update('someId', {
"$addToSet": {
objects: object
}
}, function(err) {
if (err) {
throw err;
} else {
return true;
}
});
} else {}
}
});
Ich habe Angst, dass, wenn saveOnServer() von 2-Clients zur gleichen Zeit aufgerufen wird, wird es die gleiche totalcount für jeden Client zurück und grundsätzlich gleiches Einfügen am Ende Ganzzahl in Objekt-ID. Das Endziel besteht darin, eine Zeile auf der Serverseite mit einer atomaren Operation einzufügen, die erst abgeschlossen wird, wenn die totalCount
erfolgreich zurückgegeben wird und das Dokument eingefügt wird, um sicherzustellen, dass keine doppelte ID existiert? Ich versuche, die mongodb _id nicht zu benutzen, aber habe meine eigene ganzzahlige ID-Spalte.
Ich frage mich, wie ich sicherstellen kann, dass ein Feld für jeden Einfügevorgang automatisch inkrementiert wird? Ich verlasse mich derzeit auf die Gesamtzahl der Dokumente. Ist hier eine Race Condition möglich? Wenn ja, was ist der Meteor-Weg, damit umzugehen?
im Prinzip ist der Meteorcode zu weit von den Daten entfernt, um dies zu gewährleisten. Es ist eine bessere Idee, dbms-Tools für eine solche Validierung zu verwenden. – dandavis
auf der Serverseite ist alles synchron, um Callback-Hölle mit Knoten-Fasern zu vermeiden? Aber meteor.collection verwaltet mongodb, gibt es eine Möglichkeit, einen Meteor zu garantieren. Das Sammelobjekt wird atomar oder race condition free sein? – KJW
Gleiche Frage ist hier und beantwortet http://stackoverflow.com/questions/15886833/how-can-i-create-an-auto-increment-field-on-meteor. Ihr Code ist kein Problem, es sei denn, Sie arbeiten auf mehreren Servern. – user728291