Подтвердить что ты не робот

Как получить последний вставленный идентификатор с помощью JS api?

Используя javascript api для MongoDB, как вы получаете идентификатор последнего вставленного объекта? то есть.

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

Как получить идентификатор для obj?

4b9b3361

Ответ 1

Люди на #mongodb были полезны. JS API в настоящее время не поддерживает это, но вы можете использовать свой собственный идентификатор. Чтобы создать "нормальный" id, сделайте _id: new ObjectId(). Итак, пример в моем вопросе:

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

Ответ 2

Если вы запустите

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 ] }

Таким образом, вы можете получить свои идентификаторы вместе со всеми вставленными объектами через:

ret.ops[0]._id

или прямой

ret.insertedIds[0]

Ответ 3

Теперь, 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

Ответ 4

Если вы вставляете данные следующим образом:

    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." + User._id);