когда я запускаю простой код ниже, чтобы вставить новый документ:

collectionUsers.insert({'name':'john'},function(err,records){
    if (err) throw err;
    console.log("Id of new document added =  " + records[0]._id);
});

Я получаю следующие ошибки:

catch(err) { process.nextTick(function() { throw err}); }
                                             ^
TypeError: Cannot read property '_id' of undefined

Не возвращает ли функция обратного вызова массив? Я просто пытаюсь получить id нового документа и сохранить его в переменной для дальнейшего использования. Спасибо за помощь.

Альтернативно, если я использую insertOne вместо этого, я получаю следующий вывод: Id нового добавленного документа = {"ok":1, "n":1}

Но я хочу использовать вставку...

cmonkey

Ответов: 2

Ответы (2)

В ops в records есть объект ops, который содержит вставленные doc/docs.

Попробуйте:

collectionUsers.insert({'name':'john'},function(err,records){
   // You can explore more here
   console.log("record contents",JSON.stringify(records,null,4));
   // Desired output
   console.log("Id of new document added =  " + records.ops[0]._id);
});

Большое спасибо user2285490 и robertklep. Я наконец-то понял, что такое объект ops в записи. Вот документация по api на будущее:

http://mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#~insertWriteOpCallback

2022 WebDevInsider