2017-03-21 2 views
0

Ich entwickle eine Abfrage von Aufgaben. Wenn eine Aufgabe angefordert wird, ich bin wieder den ältesten mit dem folgenden Code:Mongoose Update-Dokument im Moment der Suche nach

Task.find({}) 
     // Filter for those that are not started yet 
     .where('startDate').equals(null) 
     // Sort ascending to get the oldest 
     .sort({ reqDate: 'asc' }).findOne(function (err, task) { ... } 

Innerhalb der letzten Klammern, stellte ich den startdate auf die aktuelle Zeit. Die Anforderungen werden durch den Aufruf einer einzelnen NodeJS (Express) API ausgeführt, die Express ausführt und mit MongoDB kommuniziert, indem sie Mongoose verwendet.

Das funktioniert gut mit nur einer Person, die Aufgaben anfordert, aber ich denke gerade an eine große Skala. Was passiert, wenn mehrere Personen im selben Moment anfragen und alle die gleiche Aufgabe erhalten, wie sie in der gleichen Zeitspanne von einigen Millisekunden eintreffen?

Gibt es eine Möglichkeit, sicherzustellen, dass die startDate des Dokuments in dem Moment, in dem es von Mungo gefunden wird, festgelegt ist?

Antwort

2

In Mongo gibt es db.collection.findAndModify() und db.collection.findOneAndUpdate():

Aber Sie sind wahrscheinlich sowieso Rennbedingungen erhalten.

Viel mehr Werkzeuge sind hier:

Um es zusammenzufassen, können Sie in der Lage sein, um Ihr aktuelles Problem arbeitet mit db.collection.findAndModify() und db.collection.findOneAndUpdate() aber ein richtigen Werkzeug für die Warteschlangen oder Pub mit/sub wird Ihnen viele Probleme ersparen, besonders wenn Sie mehrere Aufgaben gleichzeitig bearbeiten.

+0

Danke, genau was ich brauche. Ich werde auf jeden Fall Ihre Vorschläge genauer unter die Lupe nehmen. – Marv

Verwandte Themen