簡體   English   中英

Node + Mongoose:獲取最后插入的ID?

[英]Node + Mongoose: Get last inserted ID?

我想檢索最后插入的_id ,使用mongoose作為node.js的MongoDB包裝器。 我找到了以下教程,但我無法更改任何節點模塊,因為該應用程序在公共服務器上運行:

獲取“最后插入的ID”(提示 - 你必須破解Mongoose)

還有其他想法嗎? 這就是我想要做的:

  • 插入新用戶
  • 獲取用戶的_id
  • 根據用戶的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM