Получите _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 будет преобразовывать из шестнадцатеричного