J'ai travaillé sur une application Java qui utilise MongoDB comme forme de stockage, mais j'ai rencontré un problème. Lorsqu'un utilisateur ajoute un commentaire dans mon application, il ajoute le document à la collection de commentaires, puis effectue une reprise pour les données statistiques. Cependant, l'upsert ajoute seulement la première fois (pas d'appels après la mise à jour ou insérer de nouvelles données). Voici le code correspondant:Java MongoTemplate: Upserts non générant 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);
}
}
Voici un exemple des résultats dans ma collection de commentaires:
{
"_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)
}
... et ma stat unique, solitaire ...
{
"entity" : "759446489112216656",
"total" : 1
}
Avis le "_id" et "_class" manquants sur la collection de statistiques. Je ne reçois aucune erreur dans mes journaux mongo ou tomcat. Est-ce que quelqu'un a déjà rencontré ce problème avant ou sait ce que c'est? Merci de votre aide!
Note: Si je supprime le upsert et ajouter la stat normalement, tout ajoute bien (cela, bien sûr, ajoute plusieurs statistiques pour une seule entité, qui est pas souhaitable)
Pouvez-vous fournir la version de MongoDB vous exécutez contre et plus d'informations sur la collecte des statistiques? Vous pouvez imprimer un résumé de collection sur le shell mongo en exécutant db.statistics.stats() - en remplaçant "statistics" par le nom de votre collection. –
Comment avez-vous sorti votre entrée de la collection de statistiques? Il n'est pas possible qu'il soit inséré dans MongoDB sans ObjectId() - est-ce que c'est ce que ça ressemble de Java POV avant l'upsert? –