Pracowałem nad aplikacją Java, która używa MongoDB jako formy przechowywania, jednak mam problem. Gdy użytkownik doda komentarz w mojej aplikacji, dodaje dokument do kolekcji komentarzy, a następnie tworzy dane wyjściowe dla danych statystycznych. Jednak upsert dodaje tylko pierwszy raz (brak wywołań po aktualizacji lub wstawienie nowych danych). Oto odpowiedni kod:Java MongoTemplate: Upserts Not Generowanie ObjectId
public class CommentDAO implements ICommentDAO {
@Autowired
@Qualifier(value = "mongoDB")
MongoTemplate mongoTemplate;
public UserComment addComment(UserComment userComment) {
updateStats(userComment, 1L);
mongoTemplate.save(userComment);
return userComment;
}
public void updateStats(UserComment userComment, Long offset) {
Update update = new Update();
update.inc("total", offset);
Query query = query(where("entity").is(userComment.getEntity()));
WriteResult wr = mongoTemplate.upsert(query, update, CommentStat.class);
}
}
Oto przykład wyników w moje komentarze kolekcji:
{
"_id" : ObjectId("50ab0566e4b0ea8f74b82d48"),
"_class" : "com.test.models.comment.UserComment",
"userId" : 4,
"ownerId" : 3,
"comment" : "Test comment",
"type" : "ART",
"entity" : "759446489112216656",
"date" : Date(1353385318079)
},
{
"_id" : ObjectId("50ab0691e4b0775cf7daacad"),
"_class" : "com.test.models.comment.UserComment",
"userId" : 4,
"ownerId" : 3,
"comment" : "Another test",
"type" : "ART",
"entity" : "759446489112216656",
"date" : Date(1353385617619)
}
... i mój pojedynczy, samotny stat ...
{
"entity" : "759446489112216656",
"total" : 1
}
Wskazówka brakujące "_id" i "_class" w kolekcji statystyk. Nie otrzymuję żadnych błędów w dziennikach mongo lub tomcat. Czy ktoś kiedykolwiek napotkał ten problem wcześniej lub wie, co to jest umowa? Dzięki za pomoc!
Uwaga: Jeśli usunąć upsert i dodaj stat Normalnie wszystko dodaje porządku (w tym, oczywiście, dodaje wiele statystyk dla jednego podmiotu, który nie jest pożądane)
można dostarczyć wersję MongoDB jest uruchomiony przed i więcej informacji na temat zbierania statystyk? Możesz wydrukować podsumowanie kolekcji w powłoce Mongo, uruchamiając db.statistics.stats() - zastępując "statystyki" swoją nazwą kolekcji. –
w jaki sposób wydałeś swój wpis z kolekcji statystyk? Nie jest możliwe, że zostałby wstawiony do MongoDB bez ObjectId() - tak to wygląda z Java POV przed upsertem? –