Eu uso o NodeJS para inserir documentos no MongoDB. Usando collection.insert
posso inserir um documento no banco de dados como neste código:
// ...
collection.insert(objectToInsert, function(err){
if (err) return;
// Object inserted successfully.
var objectId; // = ???
});
// ...
Como posso obter o _id
objeto inserido?
Existe alguma maneira de obter o _id
objeto sem inserir o último _id
?
Supondo que ao mesmo tempo muitas pessoas acessem o banco de dados, não posso ter certeza se o id mais recente é o id do objeto inserido.
javascript
node.js
mongodb
Ionică Bizău
fonte
fonte
Uma maneira mais curta do que usar o segundo parâmetro para o retorno de chamada de
collection.insert
seria usarobjectToInsert._id
que retorna o_id
(dentro da função de retorno de chamada, supondo que foi uma operação bem-sucedida).O driver Mongo para NodeJS anexa o
_id
campo à referência do objeto original, portanto, é fácil obter o id inserido usando o objeto original:fonte
objectInserted
? Eu acho que você está perdendo exatamente o ponto desta resposta: o driver Mongo anexa o_id
campo ao objeto original. Editei a resposta para usar emobjectToInsert
qualquer lugar. Espero que as coisas estejam mais claras agora. :)insert()
está obsoleto. Use eminsertOne()
vez dissoComo disse o ktretyak, para obter o ID do documento inserido, a melhor maneira é usar a propriedade insertId no objeto de resultado. No meu caso, result._id não funcionou, então tive que usar o seguinte:
É a mesma coisa se você usar callbacks.
fonte
Na verdade, fiz um console.log () para o segundo parâmetro na função de retorno de chamada para inserir. Na verdade, há muitas informações retornadas além do próprio objeto inserido. Portanto, o código abaixo explica como você pode acessar seu id.
fonte
ObjectID {_bsontype: "ObjectID", id: Buffer(12)}
. Como posso usá-lo para obter a id real que está no banco de dados? ... A resposta foi encontrada em outro comentário: Usoresult.insertedId.toString()
O Mongo envia o documento completo como um objeto de retorno de chamada para que você possa simplesmente obtê-lo apenas a partir daí.
por exemplo
fonte
Agora você pode usar o método insertOne e no result.insertedId da promessa
fonte
(doc, options, callback)
. O terceiro parâmetro - um retorno de chamada, que leva dois parâmetros(error, result)
. Eresult
- é isso que você está procurando.@JSideris, código de amostra para obter o insertId.
fonte
se você quiser pegar "_id" use simpley
// toString irá converter de hexadecimal
fonte
result.insertedId
é umObjectID
objeto de tipo..toString()
irá converter este objeto em um UUID real.Você pode usar funções assíncronas para obter o campo _id automaticamente sem manipular o objeto de dados:
Retorna dados:
fonte
Outra maneira de fazer isso na função assíncrona:
fonte