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 l' _id
objet inséré?
Existe-t-il un moyen d'obtenir le _id
sans insérer le dernier objet _id
?
En supposant que dans le même temps beaucoup de gens 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é.
javascript
node.js
mongodb
Ionică Bizău
la source
la source
Un moyen plus court que d'utiliser le deuxième paramètre pour le rappel de
collection.insert
serait d'utiliserobjectToInsert._id
qui renvoie le_id
(à l'intérieur de la fonction de rappel, en supposant que l'opération a réussi).Le pilote Mongo pour NodeJS ajoute le
_id
champ à la référence d'objet d'origine, il est donc facile d'obtenir l'ID inséré à l'aide de l'objet d'origine:la source
objectInserted
? Je suppose que vous manquez exactement le point de cette réponse: le pilote Mongo ajoute le_id
champ à l'objet d'origine. J'ai édité la réponse pour l'utiliserobjectToInsert
partout. J'espère que les choses sont plus claires maintenant. :)insert()
est obsolète. Utiliser à lainsertOne()
placeComme l'a dit ktretyak, pour obtenir l'ID du document inséré, le meilleur moyen est d'utiliser la propriété insertId sur l'objet résultat. Dans mon cas, result._id ne fonctionnait pas, j'ai donc dû utiliser ce qui suit:
C'est la même chose si vous utilisez des rappels.
la source
J'ai en fait fait un console.log () pour le deuxième paramètre de la fonction de rappel pour l'insertion. Il y a en fait beaucoup d'informations renvoyées en dehors de l'objet inséré lui-même. Le code ci-dessous explique donc comment accéder à son identifiant.
la source
ObjectID {_bsontype: "ObjectID", id: Buffer(12)}
. Comment puis-je l'utiliser pour obtenir l'identifiant réel qui se trouve dans la base de données? ... J'ai trouvé la réponse dans un autre commentaire: Utilisationresult.insertedId.toString()
Mongo envoie le document complet en tant qu'objet de rappel afin que vous puissiez simplement l'obtenir à partir de là uniquement.
par exemple
la source
Vous pouvez maintenant utiliser la méthode insertOne et le résultat de la promesse.
la source
(doc, options, callback)
. Le troisième paramètre - un rappel, qui prend deux paramètres(error, result)
. Etresult
- c'est ce que vous recherchez.@JSideris, exemple de code pour obtenir insertId.
la source
si vous voulez prendre "_id" utilisez simpley
// toString convertira de hexadécimal
la source
result.insertedId
unObjectID
objet de type..toString()
convertira cet objet en un véritable UUID.Vous pouvez utiliser des fonctions asynchrones pour obtenir automatiquement le champ _id sans manipuler l'objet de données:
Renvoie des données:
la source
Une autre façon de le faire en fonction asynchrone:
la source