在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,则是一样的。