2016-04-02 20 views
1

Eski MongoDB sürücüsünden en son sürüme kod aktarmaya çalışıyorum.Java Sürücüsünü Kullanarak Bulun ve Başa Dön

BasicDBObject query = new BasicDBObject("foo", "foo"); 
int value = 1; 
BasicDBObject field = new BasicDBObject("seq", value); 
BasicDBObject update = new BasicDBObject("$inc", field); 
DBObject o = getDBCollection().findAndModify(query, null, null, false, update, true, true); 

'foo' belgeyi oluşturulduğu olacağını o zaman olmasaydı: Eski sürümde böyle bir şey vardı. Varsa, seq değeri artırılır.

Ben MongoCollection ben replaceOne kullanmak ve böyle bir şey yapmak gerekir kullanarak aynı şeyi yapmak belirleyebilir kadarıyla

:

Document query = new Document("foo", "foo"); 
int value = 1; 
Document field = new Document("seq", value); 
Document update = new Document("$inc", field); 
UpdateOptions options = new UpdateOptions().upsert(true); 
UpdateResult ret = getMongoCollection().replaceOne(query, update, options); 

ama bu java.lang.IllegalArgumentException verir: Geçersiz BSON alan adı $ inc

cevap

1

Hayır. Sen .findOneAndUpdate() istiyorum:

FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() 
    .upsert(true) 
    .returnDocument(ReturnDocument.AFTER); 

UpdateResult ret = getMongoCollection().findOneAndUpdate(query, update, options); 

.replaceOne() tam anlamı ve tüm belge temin içerikle (_id hariç) "yerine". Bu, $inc gibi değiştiricilere burada izin verilmez anlamına gelir.

Bunun yerine .findOneAndUpdate() kullanın. Büyük olasılıkla, ReturnDocument.AFTER'un, güncellemenin uygulanmasından önce "orijinal" belgeden ziyade "değiştirilmiş" belgeyi döndürmesini istediğinizi unutmayın; bu, varsayılan eylemdir.

+0

Bu işe yaradı - teşekkür ederim. FindOneAndUpdate'i daha önce kullanmayı denedim ancak bu seçenekleri kullanamadım; Bu bir katlayıcıydı. –

İlgili konular