Utilizo NodeJS para insertar documentos en MongoDB. Usando collection.insert
puedo insertar un documento en la base de datos como en este código:
// ...
collection.insert(objectToInsert, function(err){
if (err) return;
// Object inserted successfully.
var objectId; // = ???
});
// ...
¿Cómo puedo obtener el _id
objeto insertado?
¿Hay alguna forma de obtener el _id
último objeto sin insertar _id
?
Suponiendo que al mismo tiempo muchas personas acceden a la base de datos, no puedo estar seguro de que la última identificación sea la identificación del objeto insertado.
javascript
node.js
mongodb
Ionică Bizău
fuente
fuente
Una forma más corta que usar el segundo parámetro para la devolución de llamada
collection.insert
sería usarobjectToInsert._id
que devuelve el_id
(dentro de la función de devolución de llamada, suponiendo que fue una operación exitosa).El controlador Mongo para NodeJS agrega el
_id
campo a la referencia del objeto original, por lo que es fácil obtener la identificación insertada utilizando el objeto original:fuente
objectInserted
? Supongo que se está perdiendo exactamente el punto de esta respuesta: el controlador Mongo agrega el_id
campo al objeto original. Edité la respuesta para usarla enobjectToInsert
todas partes. Espero que las cosas estén más claras ahora. :)insert()
está en desuso. Úselo en suinsertOne()
lugarComo dijo ktretyak, para obtener el ID del documento insertado, la mejor manera es usar la propiedad insertId en el objeto de resultado. En mi caso, result._id no funcionó, así que tuve que usar lo siguiente:
Es lo mismo si usa devoluciones de llamada.
fuente
De hecho, hice un console.log () para el segundo parámetro en la función de devolución de llamada para insertar. En realidad, se devuelve mucha información además del objeto insertado. Entonces, el código a continuación explica cómo puede acceder a su identificación.
fuente
ObjectID {_bsontype: "ObjectID", id: Buffer(12)}
. ¿Cómo puedo usarlo para obtener la identificación real que está en la base de datos? ... Encontré la respuesta en otro comentario: Useresult.insertedId.toString()
Mongo envía el documento completo como un objeto de devolución de llamada para que pueda obtenerlo solo desde allí.
por ejemplo
fuente
Ahora puede usar el método insertOne y en el resultado de la promesa.
fuente
(doc, options, callback)
. El tercer parámetro: una devolución de llamada, que toma dos parámetros(error, result)
. Yresult
esto es lo que está buscando.@JSideris, código de muestra para obtener insertId.
fuente
si quieres tomar "_id" usa simpley
// toString se convertirá de hexadecimal
fuente
result.insertedId
es unObjectID
objeto de tipo..toString()
convertirá este objeto en un UUID real.Puede usar funciones asíncronas para obtener el campo _id automáticamente sin manipular el objeto de datos:
Devuelve datos:
fuente
Otra forma de hacerlo en función asincrónica:
fuente