18

我想检索最后插入的_id,使用 mongoose 作为 node.js 的 MongoDB 包装器。我找到了以下教程,但我无法更改任何节点模块,因为该应用程序在公共服务器上运行:

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

还有其他想法吗?这是我想做的:

  • 插入新用户
  • 获取用户_id价值
  • 根据用户 id 设置新会话
  • 重定向到 /

谢谢!

4

6 回答 6

41

我正在使用 mongoose 版本 1.2.0,一旦我创建了一个 mongoose 模型的新实例,_id就已经设置好了。

coffee> u = new User()
[object Object]
coffee> u._id
4dd68fc449aaedd177000001

我还验证了在我调用之后u.save()仍然_id是一样的。我通过 MongoHub 验证了这确实是保存到 MongoDB 中的真实 ID。

于 2011-05-20T16:05:15.860 回答
5

如果您明确声明

    _id: Schema.ObjectId

对于您的模型,则在新建或保存后 ObjectId 将不可用。这可能是一个错误。

于 2012-05-31T13:53:02.027 回答
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);
                        }

                    });
于 2011-09-29T15:08:52.750 回答
0

使用 MongoDB,如果您没有显式设置文档的_id值,则客户端驱动程序将自动将其设置为ObjectId值。这与可能在服务器上生成 ID 并需要另一个查询来检索它的数据库不同,例如 SQL Server 的scope_identity()或 MySQL 的last_insert_id()

这允许您异步插入数据,因为在继续之前不需要等待服务器返回_id值。

因此,如图所示是彼得的答案,_id在将文档保存到数据库之前可用。

于 2011-05-21T00:11:19.347 回答
0

我只是从传递给回调的文档中获取 id,因为 save 返回保存的文档。

于 2012-04-01T23:58:12.733 回答
-2

检查以下网址

http://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html

您将在给定的网址中找到以下代码

    var document = {name:"David", title:"About MongoDB"};
   collection.insert(document, {w: 1}, function(err, records){
  console.log("Record added as "+records[0]._id);
});
于 2014-10-08T13:42:06.620 回答