Existe uma maneira fácil de obter o ID (ObjectID) do último documento inserido de uma instância mongoDB usando o driver Java?
104
Acabei de perceber que você pode fazer isso:
BasicDBObject doc = new BasicDBObject( "name", "Matt" );
collection.insert( doc );
ObjectId id = (ObjectId)doc.get( "_id" );
Para evitar a transmissão de Object
para ObjectId
, dados a com.mongodb.client.MongoCollection collection
e a org.bson.Document doc
, você pode fazer o seguinte:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
É seguro fazer
se você olhar para o código do driver
fonte
it's save to do
ouit's safe to do
?Não sei sobre o driver Java, mas para a posteridade, o comando getLastError pode ser executado para obter o _id de uma gravação, mesmo um upsert (a partir de 1.5.4)
fonte
Depois que um documento é inserido na coleção do MongoDB, a inserção bem-sucedida deve atualizar os campos obrigatórios (viz. _Id). Você pode consultar o objeto inserido para o _id.
fonte
Em MongoTemplate.class tem um método
e o método definirá o id para nós
podemos ver se a entidade é uma subclasse de BasicDBObject, ela definirá um id para nós.
fonte
Acho que a resposta é "Não".
O que você pode fazer é fornecer seu
_id
próprio, manualmente, ou implementar oCollectibleCodec
mecanismo (que é exatamente o queBasicBDDocument
faz). No entanto, todas essas soluções envolvem a geração da ID do cliente.Dito isso, não acho que haja nenhum problema em gerar o
_id
lado do cliente.fonte
Esta é a operação de inserção:
Após inserir você obtém o último id inserido:
depois de obter o valor, converta em intertipo.
fonte