Sto cercando di ottenere l'objectId di un oggetto che ho aggiornato - questo è il mio codice Java utilizzando il driver Java:conducente Java: come ottenere l'objectId di un oggetto aggiornato con il metodo updateFirst di MongoDB
Query query = new Query();
query.addCriteria(Criteria.where("color").is("pink"));
Update update = new Update();
update.set("name", name);
WriteResult writeResult = mongoTemplate.updateFirst(query, update, Colors.class);
Log.e("object id", writeResult.getUpsertedId().toString());
Il messaggio di log restituisce null. Sto usando un server mongo 3.0 su mongolab perché sono sul livello gratuito quindi non dovrebbe restituire nulla. Il mio shell mongo è anche:
MongoDB versione della shell: 3.0.7
C'è un modo semplice per restituire l'ID oggetto per il documento che ho appena aggiornato? Qual è il punto del metodo getUpsertedId() se non riesco a restituire l'upsertedId?
di fare quello che voglio, ho attualmente a rilasciare due query che è altamente ingombrante:
//1st query - updating the object first
Query query = new Query();
query.addCriteria(Criteria.where("color").is("pink"));
Update update = new Update();
update.set("name", name);
WriteResult writeResult = mongoTemplate.updateFirst(query, update, Colors.class);
//2nd query - find the object so that I can get its objectid
Query queryColor = new Query();
queryColor.addCriteria(Criteria.where("color").is("pink"));
queryColor.addCriteria(Criteria.where("name").is(name));
Color color = mongoTemplate.findOne(queryColor, Color.class);
Log.e("ColorId", color.getId());
Come per la risposta di David, ho anche provato il suo suggerimento utilizzare per piuttosto upsert sul modello, così ho cambiato il codice al di sotto e ancora non funziona:
Query query = new Query();
query.addCriteria(Criteria.where("color").is("pink"));
Update update = new Update();
update.set("name", name);
WriteResult writeResult = mongoTemplate.upsert(query, update, Colors.class);
Log.e("object id", writeResult.getUpsertedId().toString());
Questa sarebbe un'ottima risposta se avesse un esempio;) –
@Markus Grazie, io non sono molto un java da solo. Puoi modificare la risposta se conosci il codice? –
Penso che in teoria ciò funzionerebbe, ma non sono sicuro al 100% poiché non ho tempo per testarlo ultimamente. Penso che il metodo call in java sia findAndModify: http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoTemplate.html#findAndModify-org .springframework.data.mongodb.core.query.Query-org.springframework.data.mongodb.core.query.Update-org.springframework.data.mongodb.core.FindAndModifyOptions-java.lang.Class- – Simon