Bu [2] yöntemini kullanarak bir belgeyi yükseltmeye (arttırma veya ekleme) çalışırken zaman zaman [2] alıyorum.Mongodb upsert atma DuplicateKeyException
[1]
public NGram save(final NGram ngram) {
Criteria cr = where("_id").is(ngram.getNgram())
.and("f3c").is(ngram.getF3c())
.and("tokCount").is(ngram.getTokCount())
.and("first").is(ngram.getFirst())
;
if(ngram.getTokCount() > 1) {
cr.and("second").is(ngram.getSecond());
}
if(ngram.getTokCount() > 2) {
cr.and("third").is(ngram.getThird());
}
final Query qry = new Query(cr);
final Update updt = new Update().inc("count", ngram.getCount());
template.upsert(qry, updt, NGram.class);
return ngram;
}
[2]
Caused by: org.springframework.dao.DuplicateKeyException: E11000 duplicate key error index: sytrue.ngram.$_id_ dup key: { : "page two" }; nested exception is com.mongodb.MongoException$DuplicateKey: E11000 duplicate key error index: sytrue.ngram.$_id_ dup key: { : "page two" }
at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:52)
at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1665)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:390)
at org.springframework.data.mongodb.core.MongoTemplate.doUpdate(MongoTemplate.java:920)
at org.springframework.data.mongodb.core.MongoTemplate.upsert(MongoTemplate.java:894)
at com.sytrue.ngram.repo.impl.NGramRepositoryImpl.save(NGramRepositoryImpl.java:43)
at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
Upsert bana bu durum asla geri gerekir. Ben haklı mıyım Sadece şu olabilir tahmin ediyorum
örneklerini aynı anda iki ihtimal göz önünde bulundurun. –
Hayır, bu sıraları bir sıraya göre sıralıyorum. – biliboc