Node + Mongoose:获取最后插入的 ID?
Posted
技术标签:
【中文标题】Node + Mongoose:获取最后插入的 ID?【英文标题】:Node + Mongoose: Get last inserted ID? 【发布时间】:2011-08-29 18:37:37 【问题描述】:我想检索最后插入的_id
,使用 mongoose 作为 node.js 的 MongoDB 包装器。我找到了以下教程,但我无法更改任何节点模块,因为该应用程序在公共服务器上运行:
Getting "Last Inserted ID" (hint - you have to hack Mongoose)
还有其他想法吗?这是我想做的:
插入新用户 获取用户的_id
值
根据用户 ID 设置新会话
重定向到 /
谢谢!
【问题讨论】:
【参考方案1】:我使用的是 mongoose 版本 1.2.0,一旦我创建了 mongoose 模型的新实例,_id
就已经设置好了。
coffee> u = new User()
[object Object]
coffee> u._id
4dd68fc449aaedd177000001
我还验证了在我调用 u.save()
后,_id
保持不变。我通过 MongoHub 验证了这确实是保存到 MongoDB 中的真实 ID。
【讨论】:
【参考方案2】:如果你明确声明
_id: Schema.ObjectId
对于您的模型,则 ObjectId 在新建或保存后将不可用。 这可能是一个错误。
【讨论】:
【参考方案3】:如果您要获取最后插入的 子对象 的 _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);
);
【讨论】:
【参考方案4】:对于 MongoDB,如果您没有显式设置文档的 _id
值,那么客户端驱动程序将自动将其设置为 ObjectId 值。这与可能在服务器上生成 ID 并需要另一个查询来检索它的数据库不同,例如 SQL Server 的 scope_identity() 或 mysql 的 last_insert_id()。
这允许您异步插入数据,因为无需等待服务器返回 _id
值即可继续。
因此,如 Peter 的回答所示,_id
在文档保存到数据库之前可用。
【讨论】:
【参考方案5】:我只是从传递给回调的文档中获取 id,因为 save 返回保存的文档。
【讨论】:
【参考方案6】:查看以下网址
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);
);
【讨论】:
这不是 mongoose 解决方案以上是关于Node + Mongoose:获取最后插入的 ID?的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Node.js 和 Mongoose 插入 MongoDB
node.js,mongodb,mongoose,html 我如何插入数据(在 index.html 中)?
node.js & mysql - 如何获取最后插入的 ID?