Node.js + MongoDB: inserte uno y devuelva el documento recién insertado

Me pregunto si hay una manera de insertar un nuevo documento y devolverlo de una sola vez.

Esto es lo que estoy usando actualmente:

db.collection('mycollection').insertOne(options, function (error, response) { ... }); 

El resultado de la response contiene información sobre si el comando fue exitoso o no y el número de registros insertados.

Si desea devolver los datos insertados, puede probar response.ops , por ejemplo:

 db.collection('mycollection').insertOne(doc, function (error, response) { if(error) { console.log('Error occurred while inserting'); // return } else { console.log('inserted record', response.ops[0]); // return } }); 

Documentación oficial para insertOne :

http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#insertOne

El tipo de callback :

http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~insertOneWriteOpCallback

El tipo de result :

http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~insertOneWriteOpResult

Podrías usar la mongoose para hacer esto. Con el método de save , puede insertar un documento y devolverlo en caso de éxito. Aquí hay un ejemplo de la documentación de la mongoose :

 product.save(function (err, product, numAffected) { if (err) { // Handle error... } else { // Do something with the returned document... } }) 

Podrías usar mongojs para hacer esto.

 db.collection('mycollection').save(doc, function(error, response){ // response has _id }) 

El siguiente código funcionó para mí, en la versión 2.2.33 de MongoDB.

 db.collection("sample_collection").insertOne({ field1: "abcde" }, (err, result) => { if(err) console.log(err); else console.log(result.ops[0].field1) }