如何使用JS api获取最后插入的id?

时间:2010-08-31 16:51:30

标签: mongodb

使用MongoDB的javascript api,如何获取最后插入的对象的ID?即。

obj = {a: 1, b: 2};
db.foo.insert(obj);

如何获取obj的ID?

4 个答案:

答案 0 :(得分:24)

#mongodb上的人们很有帮助。 JS API目前不支持此功能,但您可以使用自己的ID。要生成“普通”id,请执行_id:new ObjectId()。所以我的问题中的例子是:

id = new ObjectId();
obj = {a: 1, b: 2, _id: id};
db.foo.insert(obj);

答案 1 :(得分:1)

如果你跑

db.collection("venues").insert( {name: "test3", FSid: "test3"}, function( err, ret) {
   console.log( ret )
})

它返回

{ result: { ok: 1, n: 1 },
  ops: [ { name: 'test3', FSid: 'test3', _id: 57cb0a1162cecfe636df6fc1 } ],
  insertedCount: 1,
  insertedIds: [ 57cb0a1162cecfe636df6fc1 ] }

因此,您可以通过以下方式获取所有插入对象的ID:

ret.ops[0]._id

或直接

ret.insertedIds[0]

答案 2 :(得分:0)

现在,mongo native js api支持这个。你可以得到这样的最后一个id:

collection.insert(line, {w : 1}, function(err, inserted) {
  inserted[0]._id
}

insert在插入的对象上设置_id属性,但看起来你必须等待对象返回。我发现的最好的文档(不幸的是)在源代码中:

https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js

答案 3 :(得分:0)

如果您插入如下数据:

    var temptodo = new User({
        title: data.todo.text,
        email: socket.handshake.email,
        created_at: Date.now(),
        completed: false,
        sid: socket.handshake.sid
    });
    temptodo.save( function(error, User){

            console.log("this is the id for the new todo. "+User._id);
            console.log('Todo saved in database with sid: '+socket.handshake.sid);
    });

然后你可以像这样抓取_id:console.log(“这是新todo的id。”+ User._id);