Próbuję uzyskać objectID obiektu, że mam zaktualizowanego - to jest mój kod Java za pomocą sterownika Java:kierowca Java: jak uzyskać objectID z zaktualizowanym obiektu metodą MongoDB za updateFirst
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());
Komunikat dziennika zwraca wartość null. Używam serwera Mongo 3.0 na mongolabie, ponieważ jestem na wolnym poziomie, więc nie powinien zwracać wartości null. Moja Mongo powłoka jest również:
MongoDB wersja shell: 3.0.7
Czy istnieje prosty sposób, aby powrócić identyfikator obiektu dla dokumentu, który właśnie zaktualizowaną? Jaki jest sens metody getUpsertedId(), jeśli nie mogę zwrócić upsertedId?
Aby zrobić to, co chcę, obecnie mam wydać dwie kwerendy, która jest bardzo uciążliwa:
//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());
Jak na odpowiedź Dawida Próbowałem nawet jego sugestię, aby raczej używać upsert na szablonie, więc zmieniłem kod do dołu i nadal nie działa:
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());
Byłaby to świetna odpowiedź, gdyby miał przykład;) –
@Markus Dziękuję, sam nie jestem zbyt dobrym facetem z java. Czy możesz edytować odpowiedź, jeśli znasz kod? –
Myślę, że teoretycznie to zadziała, ale nie jestem jeszcze w 100% pewny, ponieważ nie mam czasu, aby go przetestować. Myślę, że wywołanie metody w języku Java byłoby 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