Ich benutze NodeJS, um Dokumente in MongoDB einzufügen. Mit collection.insert
Ich kann ein Dokument wie in diesem Code in die Datenbank einfügen:
// ...
collection.insert(objectToInsert, function(err){
if (err) return;
// Object inserted successfully.
var objectId; // = ???
});
// ...
Wie kann ich das _id
eingefügte Objekt erhalten?
Gibt es eine Möglichkeit, das zu erhalten, _id
ohne das neueste Objekt einzufügen _id
?
Angenommen, gleichzeitig greifen viele Personen auf die Datenbank zu, kann ich nicht sicher sein, ob die neueste ID die ID des eingefügten Objekts ist.
javascript
node.js
mongodb
Ionică Bizău
quelle
quelle
Ein kürzerer Weg als die Verwendung von zweiten Parametern für den Rückruf von
collection.insert
wäre mit ,objectToInsert._id
dass kehrt die_id
(innerhalb der Callback - Funktion, es war ein erfolgreicher Betrieb angenommen).Der Mongo-Treiber für NodeJS hängt das
_id
Feld an die ursprüngliche Objektreferenz an, sodass es einfach ist, die eingefügte ID mithilfe des ursprünglichen Objekts abzurufen :quelle
objectInserted
? Ich denke, Sie verpassen genau den Punkt dieser Antwort: Der Mongo-Treiber hängt das_id
Feld an das ursprüngliche Objekt an. Ich habe die Antwort so bearbeitet, dass sieobjectToInsert
überall verwendet werden kann. Hoffe, die Dinge sind jetzt klarer. :)insert()
ist veraltet. Verwenden SieinsertOne()
stattdessenWie ktretyak sagte, besteht die beste Möglichkeit, die ID des eingefügten Dokuments zu erhalten, darin, die Eigenschaft insertId für das Ergebnisobjekt zu verwenden. In meinem Fall hat result._id nicht funktioniert, daher musste ich Folgendes verwenden:
Es ist dasselbe, wenn Sie Rückrufe verwenden.
quelle
Ich habe tatsächlich eine console.log () für den zweiten Parameter in der Rückruffunktion zum Einfügen erstellt. Abgesehen vom eingefügten Objekt selbst werden tatsächlich viele Informationen zurückgegeben. Der folgende Code erklärt also, wie Sie auf die ID zugreifen können.
quelle
ObjectID {_bsontype: "ObjectID", id: Buffer(12)}
. Wie kann ich es verwenden, um die tatsächliche ID in der Datenbank zu erhalten? ... Die Antwort in einem anderen Kommentar gefunden: Verwendenresult.insertedId.toString()
Mongo sendet das gesamte Dokument als Rückrufobjekt, sodass Sie es einfach nur von dort abrufen können.
beispielsweise
quelle
Jetzt können Sie die insertOne- Methode und in der result.insertedId des Versprechens verwenden
quelle
(doc, options, callback)
. Der dritte Parameter - ein Rückruf, der zwei Parameter akzeptiert(error, result)
. Undresult
- das ist was Sie suchen.@JSideris, Beispielcode zum Einfügen der ID.
quelle
Wenn Sie "_id" nehmen möchten, verwenden Sie simpley
// toString konvertiert von hex
quelle
result.insertedId
werden, einObjectID
Typobjekt sind..toString()
konvertiert dieses Objekt in eine echte UUID.Sie können asynchrone Funktionen verwenden , um das Feld _id automatisch abzurufen, ohne das Datenobjekt zu manipulieren:
Gibt Daten zurück:
quelle
Eine andere Möglichkeit, dies in der asynchronen Funktion zu tun:
quelle