Я использую NodeJS для вставки документов в MongoDB. С помощью collection.insert
я могу вставить документ в базу данных, как в этом коде:
// ...
collection.insert(objectToInsert, function(err){
if (err) return;
// Object inserted successfully.
var objectId; // = ???
});
// ...
Как я могу получить _id
вставленный объект?
Есть ли способ получить _id
без вставки последнего объекта _id
?
Предположим, что в то же время к базе данных обращается много людей, я не могу быть уверен, что последний идентификатор - это идентификатор вставленного объекта.
javascript
node.js
mongodb
Ионика Бизэу
источник
источник
Более короткий способ, чем использование второго параметра для обратного вызова, -
collection.insert
это использовать,objectToInsert._id
который возвращает_id
(внутри функции обратного вызова, если это была успешная операция).Драйвер Mongo для NodeJS добавляет
_id
поле к исходной ссылке на объект, поэтому легко получить вставленный идентификатор, используя исходный объект:источник
objectInserted
? Думаю, вам не хватает именно сути этого ответа: драйвер Mongo добавляет_id
поле к исходному объекту. Я отредактировал ответ, чтобы использоватьobjectToInsert
везде. Надеюсь, теперь все прояснилось. :)insert()
устарело. ИспользоватьinsertOne()
вместоКак сказал ktretyak, лучший способ получить вставленный идентификатор документа - использовать свойство InsertId для объекта результата. В моем случае result._id не работал, поэтому мне пришлось использовать следующее:
То же самое и с обратными вызовами.
источник
Я фактически сделал console.log () для второго параметра в функции обратного вызова для вставки. На самом деле, помимо самого вставленного объекта возвращается много информации. Итак, приведенный ниже код объясняет, как вы можете получить доступ к его идентификатору.
источник
ObjectID {_bsontype: "ObjectID", id: Buffer(12)}
. Как я могу использовать его , чтобы получить фактический идентификатор , который находится в базе данных ... Найден ответ на другой комментарий: Использованиеresult.insertedId.toString()
Mongo отправляет полный документ как объект обратного вызова, поэтому вы можете просто получить его только оттуда.
например
источник
Теперь вы можете использовать метод insertOne и в обещании result.insertedId
источник
(doc, options, callback)
. Третий параметр - обратный вызов, принимающий два параметра(error, result)
. Иresult
- это то, что вы ищете.@JSideris, пример кода для получения InsertId.
источник
если вы хотите использовать _id, используйте simpley
// toString будет преобразовывать из шестнадцатеричного
источник
result.insertedId
являетсяObjectID
объектом типа..toString()
преобразует этот объект в настоящий UUID.Вы можете использовать асинхронные функции для автоматического получения поля _id без изменения объекта данных:
Возвращает данные:
источник
Другой способ сделать это в функции async:
источник