web-dev-qa-db-de.com

Rufen Sie die _id des eingefügten Dokuments in der Mongo-Datenbank in NodeJS ab

Ich benutze NodeJS, um Dokumente in MongoDB einzufügen. Mit collection.insert kann ich 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 den _id des eingefügten Objekts erhalten?

Gibt es eine Möglichkeit, den _id abzurufen, ohne dass das neueste Objekt _id eingefügt wird?

Angenommen, in der gleichen Zeit greifen viele Leute auf die Datenbank zu. Ich kann nicht sicher sein, dass die letzte ID die ID des eingefügten Objekts ist.

81
Ionică Bizău

Es gibt einen zweiten Parameter für den Rückruf für collection.insert, der das eingefügte Dokument oder die eingefügten Dokumente zurückgibt, die _ids haben sollten.

Versuchen:

collection.insert(objectToInsert, function(err,docsInserted){
    console.log(docsInserted);
});

und überprüfen Sie die Konsole, um zu sehen, was ich meine.

78
georgedyer

Ein kürzerer Weg als die Verwendung eines zweiten Parameters für den Rückruf von collection.insert wäre objectToInsert._id, der den _id zurückgibt (innerhalb der Rückruffunktion, vorausgesetzt, es war eine erfolgreiche Operation).

Der Mongo-Treiber für NodeJS hängt das Feld _id an die ursprüngliche Objektreferenz an, sodass Sie die eingefügte ID einfach mit dem Originalobjekt abrufen können:

collection.insert(objectToInsert, function(err){
   if (err) return;
   // Object inserted successfully.
   var objectId = objectToInsert._id; // this will return the id of object inserted
});
77
Ionică Bizău

Ich habe tatsächlich eine console.log () für den zweiten Parameter in der Rückruffunktion für insert gemacht. Abgesehen von dem eingefügten Objekt selbst werden tatsächlich viele Informationen zurückgegeben. Der folgende Code erklärt, wie Sie auf die ID zugreifen können. 

collection.insert(objToInsert, function (err, result){
    if(err)console.log(err);
    else {
        console.log(result["ops"][0]["_id"]);
        // The above statement will output the id of the 
        // inserted object
       }
});
11
Sidak

Wie ktretyak sagte, ist die beste Methode, um die ID eines eingefügten Dokuments zu erhalten, die Verwendung der Eigenschaft insertId für das Ergebnisobjekt. In meinem Fall funktionierte result._id nicht, also musste ich folgendes verwenden: 

db.collection("collection-name")
  .insertOne(document)
  .then(result => {
    console.log(result.insertedId);
  })
  .catch(err => {
    // handle error
  });

Dasselbe gilt für Callbacks. 

9
Serjuice

Mongo sendet das vollständige Dokument als Rückrufobjekt, sodass Sie es nur von dort aus erhalten können.

zum Beispiel

collection.save(function(err,room){
  var newRoomId = room._id;
  });

Jetzt können Sie die Methode insertOne und in result.insertedId von promise verwenden

4
ktretyak

@JSideris, Beispielcode zum Abrufen der insertId.

db.collection(COLLECTION).insertOne(data, (err, result) => {
    if (err) 
      return err;
    else 
      return result.insertedId;
  });
1
Pyae Sone

wenn Sie "_id" verwenden möchten, verwenden Sie simpley

result.insertedId.toString() 

// toString konvertiert von hex

0
dewelloper