我想檢索最後插入的_id
,使用mongoose作爲node.js的MongoDB包裝器。我發現下面的教程,但由於應用程序在公共服務器上運行,我不能改變任何節點模塊:Node + Mongoose:獲取最後插入的ID?
Getting "Last Inserted ID" (hint - you have to hack Mongoose)
任何其他的想法?這是我想做的事:
- 插入新的用戶
- 獲取用戶的
_id
值 - 設置基於用戶ID的新會話
- 重定向到/
謝謝!
我想檢索最後插入的_id
,使用mongoose作爲node.js的MongoDB包裝器。我發現下面的教程,但由於應用程序在公共服務器上運行,我不能改變任何節點模塊:Node + Mongoose:獲取最後插入的ID?
Getting "Last Inserted ID" (hint - you have to hack Mongoose)
任何其他的想法?這是我想做的事:
_id
值謝謝!
我使用貓鼬版本1.2.0,只要我創建了一個貓鼬模型的新實例,_id
已經設置。
coffee> u = new User()
[object Object]
coffee> u._id
4dd68fc449aaedd177000001
我也驗證了我稱之爲u.save()
後_id
保持不變。我通過MongoHub驗證這確實是保存到MongoDB中的真實ID。
對於MongoDB,如果您沒有明確設置文檔的_id
值,則客戶端驅動程序會自動將其設置爲ObjectId的值。這與可能在服務器上生成ID並需要其他查詢來檢索它的數據庫不同,例如SQL Server的scope_identity()或MySQL的last_insert_id()。
這使您可以異步插入數據,因爲在繼續之前不需要等待服務器返回_id
的值。
所以,如圖所示是彼得的回答,_id
在文檔被保存到數據庫之前是可用的。
如果您想要獲取子對象的最後一個插入_id,則創建該對象並將其添加到該項目。下面是使用的MongoDB和貓鼬(添加一些架構糖),然後將結果轉換爲JSON發送回客戶端NowJS一個例子:
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);
}
});
我剛從傳遞給回調的文件拿到ID,自保存返回保存的文件。
如果你明確聲明
_id: Schema.ObjectId
您的機型,那麼的ObjectId將無法使用後,新的或保存。 這可能是一個錯誤。
我確認這個錯誤。 – Olivier 2012-12-28 16:03:14
檢查以下網址
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);
});
這不是**貓鼬**解決方案 – ruX 2015-05-12 16:52:59
很好聽!謝謝你的測試! – Tronic 2011-05-20 16:58:34