[英]How to get the last inserted _id from MongoDB using node express
[英]Node + Mongoose: Get last inserted ID?
我想檢索最后插入的_id
,使用mongoose作為node.js的MongoDB包裝器。 我找到了以下教程,但我無法更改任何節點模塊,因為該應用程序在公共服務器上運行:
獲取“最后插入的ID”(提示 - 你必須破解Mongoose)
還有其他想法嗎? 這就是我想要做的:
_id
值 謝謝!
我正在使用mongoose版本1.2.0,一旦我創建了一個mongoose模型的新實例, _id
就已經設置好了。
coffee> u = new User()
[object Object]
coffee> u._id
4dd68fc449aaedd177000001
我也驗證了在調用u.save()
, _id
保持不變。 我通過MongoHub驗證了這確實是保存到MongoDB中的真實ID。
如果你明確聲明
_id: Schema.ObjectId
對於您的模型,在新的或保存后,ObjectId將不可用。 這可能是一個錯誤。
如果您想要獲取子對象的最后一個_id,則創建該對象,然后將其添加到該項目中。 這是NowJS中使用MongoDB和Mongoose(添加一些模式糖)的示例,然后將結果轉換為JSON以發送回客戶端:
var nowRoomID = this.now.room;
var Conversation = mongoose.model('Conversation');
Conversation.findById(convID, function(error, conversation) {
var Blip = mongoose.model('Blip');
var createdBlip = new Blip();
createdBlip.author= nowUserName;
createdBlip.authorid = parsed.authorid;
createdBlip.body = revisedText;
createdBlip.created_at = new Date();
createdBlip.modified_at = new Date();
conversation.blips.push(createdBlip);
parsed._id = createdBlip._id; //NOTE: ID ACCESSED HERE
message = JSON.stringify(parsed);
conversation.save(function (err) {
if (!err) {
console.log('Success - saved a blip onto a conversation!');
nowjs.getGroup(nowRoomID).now.receiveMessage(nowUserName, message);
}
});
使用MongoDB,如果您沒有顯式設置文檔的_id
值,則客戶端驅動程序將自動將其設置為ObjectId值。 這與可能在服務器上生成ID並需要另一個查詢來檢索它的數據庫不同 ,例如SQL Server的scope_identity()或MySQL的last_insert_id() 。
這允許您異步插入數據,因為在繼續之前不需要等待服務器返回_id
值。
因此,如圖所示是Peter的答案, _id
在文檔保存到數據庫之前可用。
我只是從傳遞給回調的文檔中獲取id,因為save返回保存的文檔。
檢查下面的網址
http://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html
您將在給定的URL中找到以下代碼
var document = {name:"David", title:"About MongoDB"};
collection.insert(document, {w: 1}, function(err, records){
console.log("Record added as "+records[0]._id);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.