web-dev-qa-db-fra.com

Récupère le _id du document inséré dans la base de données Mongo dans NodeJS

J'utilise NodeJS pour insérer des documents dans MongoDB. En utilisant collection.insert je peux insérer un document dans la base de données comme dans ce code:

// ...
collection.insert(objectToInsert, function(err){
   if (err) return;
   // Object inserted successfully.
   var objectId; // = ???
});
// ...

Comment puis-je obtenir le _id de l'objet inséré?

Existe-t-il un moyen d’obtenir le _id sans obtenir le dernier objet inséré _id?

En supposant que dans le même temps beaucoup de personnes accèdent à la base de données, je ne peux pas être sûr que le dernier identifiant est l'identifiant de l'objet inséré.

81
Ionică Bizău

Il existe un deuxième paramètre pour le rappel pour collection.insert qui renverra le ou les documents insérés, qui devrait avoir _ids.

Essayer:

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

et vérifiez la console pour voir ce que je veux dire.

78
georgedyer

Un moyen plus court que d'utiliser le deuxième paramètre pour le rappel de collection.insert serait d'utiliser objectToInsert._id qui renvoie le _id (à l'intérieur de la fonction de rappel, en supposant que l'opération a abouti).

Le pilote Mongo pour NodeJS ajoute le champ _id à la référence d'objet d'origine. Il est donc facile d'obtenir l'identifiant inséré à l'aide de l'objet d'origine:

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

J'ai en fait fait console.log () pour le deuxième paramètre de la fonction de rappel pour l'insertion. En fait, beaucoup d'informations sont renvoyées en dehors de l'objet inséré lui-même. Le code ci-dessous explique donc comment accéder à son identifiant. 

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

Comme l'a dit ktretyak, pour obtenir l'identifiant d'un document inséré, le meilleur moyen consiste à utiliser la propriété InsertId sur l'objet résultat. Dans mon cas, result._id ne fonctionnait pas, je devais donc utiliser ce qui suit: 

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

C'est la même chose si vous utilisez des rappels. 

9
Serjuice

Mongo envoie le document complet en tant qu'objet callback afin que vous puissiez l'obtenir simplement à partir de là.

par exemple

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

Vous pouvez maintenant utiliser insertOne method et dans le résultat de promesse.insertedId

4
ktretyak

@JSideris, exemple de code pour obtenir insertId.

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

si vous voulez prendre "_id" utilisez simplement

result.insertedId.toString() 

// toString convertira de l'hex

0
dewelloper