Получите _id вставленного документа в базу данных Mongo в NodeJS

Я использую NodeJS для вставки документов в MongoDB. Используя collection.insert, я могу вставить документ в базу данных, как в этом коде:

// ...
collection.insert(objectToInsert, function(err){
   if (err) return;
   // Object inserted successfully.
   var objectId; // = ???
});
// ...

Как я могу получить _id вставленного объекта?

Есть ли способ получить _id без добавления последнего объекта _id?

Предположим, что в то же время многие люди обращаются к базе данных, я не могу быть уверен, что последний идентификатор является идентификатором объекта.

Ответ 1

Существует второй параметр для обратного вызова для collection.insert который будет возвращать вставленный документ или документ, который должен иметь _ids.

Пытаться:

collection.insert(objectToInsert, function(err,docsInserted){
    console.log(docsInserted);
});

и проверьте консоль, чтобы увидеть, что я имею в виду.

Ответ 2

Более короткий путь, чем использование второго параметра для обратного вызова collection.insert, будет использовать objectToInsert._id, который возвращает _id (внутри функции обратного вызова, предположив, что это была успешная операция).

Монгольский драйвер для NodeJS добавляет поле _id к исходной ссылке на объект, поэтому легко получить вставленный идентификатор с использованием исходного объекта:

collection.insert(objectToInsert, function(err){
   if (err) return;
   // Object inserted successfully.
   var objectId = objectToInsert._id; // this will return the id of object inserted
});

Ответ 3

Я действительно сделал console.log() для второго параметра в функции обратного вызова для вставки. На самом деле существует много информации, возвращенной отдельно от вставленного объекта. Поэтому приведенный ниже код объясняет, как вы можете получить доступ к этому id.

collection.insert(objToInsert, function (err, result){
    if(err)console.log(err);
    else {
        console.log(result["ops"][0]["_id"]);
        // The above statement will output the id of the 
        // inserted object
       }
});

Ответ 4

Как сказал ktretyak, для получения вставленного идентификатора документа лучшим способом является использование свойства insertId в объекте результата. В моем случае result._id не работал, поэтому мне пришлось использовать следующее:

db.collection("collection-name")
  .insertOne(document)
  .then(result => {
    console.log(result.insertedId);
  })
  .catch(err => {
    // handle error
  });

Это то же самое, если вы используете обратные вызовы.

Ответ 5

Mongo отправляет полный документ как callbackobject, поэтому вы можете просто получить его только оттуда.

например

collection.save(function(err,room){
  var newRoomId = room._id;
  });

Ответ 6

Теперь вы можете использовать метод insertOne и в файле результатов results.insertedId

Ответ 7

@JSideris, пример кода для вставки ID.

db.collection(COLLECTION).insertOne(data, (err, result) => {
    if (err) 
      return err;
    else 
      return result.insertedId;
  });

Ответ 8

если вы хотите взять "_id", используйте Simpley

result.insertedId.toString() 

//toString будет преобразовывать из шестнадцатеричного