MongoDBをストレージの形式として使用するJavaアプリケーションで作業していましたが、問題が発生しました。ユーザーがアプリでコメントを追加すると、コメントコレクションにドキュメントが追加され、統計データのアップカウントが実行されます。ただし、upsertは最初の時刻を追加するだけです(更新後の呼び出しも新しいデータの挿入もありません)。ここでは、関連するコードは次のとおりです。Java MongoTemplate:Upsertsが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);
}
}
は、ここに私のコメントのコレクション内の結果の一例です:
{
"_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)
}
...と私のシングル、孤独のstat ...
{
"entity" : "759446489112216656",
"total" : 1
}
お知らせstatコレクションに "_id"と "_class"がありません。私はmongoやtomcatのログに何のエラーも出ません。誰もがこの問題にぶつかる前に、または取引が何であるか知っていますか?ご協力いただきありがとうございます!
注: 私はアップサートを削除し、通常のstatを追加した場合、すべてが正常追加(これは、当然のことながら、望ましいことではない単一のエンティティのための複数の統計情報が追加されます)
実行しているMongoDBのバージョンと統計情報の詳細について教えてください。 db.statistics.stats()を実行して、コレクション名に "statistics"を代入することで、mongoシェルでコレクションの要約を表示することができます。 –
statコレクションからあなたのエントリをどのように出力しましたか? ObjectId()を使わずにMongoDBに挿入することはできないでしょう - これはupsertの前にJava POVから見えますか? –