MongoDB をストレージの形式として使用する Java アプリに取り組んでいますが、問題が発生しました。ユーザーがアプリにコメントを追加すると、そのドキュメントがコメント コレクションに追加され、統計データのアップサートが実行されます。ただし、アップサートは初回のみ追加します (更新後の呼び出しや新しいデータの挿入はありません)。関連するコードは次のとおりです。
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);
}
}
私のコメント コレクションの結果の例を次に示します。
{
"_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 )
}
...そして私の孤独なステータス...
{
"entity" : "759446489112216656",
"total" : 1
}
統計コレクションで「_id」と「_class」が欠落していることに注意してください。mongo または tomcat のログにエラーが記録されていません。誰かが以前にこの問題に遭遇したことがありますか、または取引が何であるかを知っていますか? ご協力いただきありがとうございます!
注: upsert を削除して統計を正常に追加すると、すべてが正常に追加されます (もちろん、これは単一のエンティティに対して複数の統計を追加するため、望ましくありません)。