在NodeJS中获取Mongo数据库中插入文档的_id

我使用NodeJS在MongoDB中插入文档。 使用collection.insert我可以像这样的代码中插入一个文档到数据库中:

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

我怎样才能得到插入对象的_id

有没有办法让_id没有获取最新的对象_id

假设在同一时间很多人访问数据库,我不能确定最新的ID是插入对象的ID。

collection.insert的callback有第二个参数,它将返回插入的doc或docs,它们应该有_ids。

尝试:

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

并检查控制台,看看我的意思。

你也可以试试这里: https : //runnable.com/UTpPRysNM0MHAGAk/server.js

比使用第二个参数调用collection.insert方法更简单的方法是使用objectToInsert._id ,它返回_id (在callback函数内部,假设它是一个成功的操作)。

NodeJS的Mongo驱动程序将_id字段附加到原始对象引用,所以使用原始对象很容易得到插入的id:

 collection.insert(objectToInsert, function(err){ if (err) return; // Object inserted successfully. var objectId = objectToInsert._id; // this will return the id of object inserted }); 

我实际上做了一个console.log()为插入的callback函数中的第二个参数。 实际上,除插入的对象本身外,还有很多信息返回。 所以下面的代码解释了如何访问它的id。

 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 } }); 

Mongo作为callback对象发送完整的文档,所以你只能从那里得到它。

例如

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

现在你可以使用insertOne方法和promise的result.insertedId

正如ktretyak所说,获取插入文档的ID最好的方法是在结果对象上使用insertedId属性。 在我的情况下,result._id不起作用,所以我不得不使用以下内容:

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

如果您使用callback,则是一样的。