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é.
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.
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
});
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
}
});
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.
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;
});
Vous pouvez maintenant utiliser insertOne method et dans le résultat de promesse.insertedId
@JSideris, exemple de code pour obtenir insertId.
db.collection(COLLECTION).insertOne(data, (err, result) => {
if (err)
return err;
else
return result.insertedId;
});
si vous voulez prendre "_id" utilisez simplement
result.insertedId.toString()
// toString convertira de l'hex