2016-01-15 41 views
8

olduğunu ve MongoDb 2.6.10 kullanıyorum ve C# Driver 1.9.2 kullanıyorum. Sunucu iki sunucudan oluşan bir kopyası vardır.Mongo güncelleme yanıtı hiçbir belgenin güncellenmediğini, ancak belgenin

Belgelerim formatta. itemId benzersizdir.

{ 
    "itemID": 2314, 
    "Favorites": [1, 24, 26, 34] 
} 

Sonra, değer olarak geri döner I result.DocumentsAffected bir süre içinde bir kez 1'e eşit olup olmadığını kontrol etmek her zaman sonra formunda

var query = Query.EQ("itemID", itemId); 
var result = collection.Update(query, Update.Pull("Favorites", favoriteIdToRemove)); 

bir favori kaldırmak için kod 0. MongoDB'ye kendim girdiğimde, itemID ile eşleşen belgeyi bulabilirim ve dizi dizisinde kaldırmaya çalıştığı favoriteId'yi hala görebiliyorum. result.OK doğru ve hata bilgisi yok.

Bunun başarısız olmasına ne sebep olabilir?

+1

Genellikle, sorun belge ile güncelleştirme isteği arasındaki uyumsuz türlerdir. Sorunuzu, belirli bir tekrarlanabilir örnek sağlamak için düzenleyebilir misiniz? – JohnnyHK

+0

Sorun, sürekli olarak tekrarlanamaz. Aslında, her iki günde bir olur. Bu benim tam kodum ve örnek bir belge. – Nikhil

cevap

1

Uzman değilim, ancak MongoDB'deki belgelere yazma ve güncelleştirme için farklı düzeylerde garanti bulunduğundan, yazım kaygılar yazıyor.

MongoCollection.Update Method (IMongoQuery, IMongoUpdate) 

daha iyi olur bu method yerine kullanmak: Write Concerns

Bunun yerine bu method kullanarak Bkz

MongoCollection.Update Method (IMongoQuery, IMongoUpdate, WriteConcern) 

Ve WriteConcern belirtmek olmak

WriteConcern.WMajority 

Bu şekilde güncellemenin en yüksek guaraya sahip olması ntee.

+0

Tüm işlemler birincil sunucuda yapılmıyor mu? – Nikhil

+0

Evet, tüm yazma işlemleri birincilde gerçekleşir. Bununla birlikte, birincil sayının, başarılı bir yazının nüshasının N sayısının yazımı çoğaltmasını bekleyene kadar beklemesini isteyebilirsiniz. –

+0

Bunu deneyeceğim. Bununla birlikte, eğer tüm yazılar öncelikliyse, yazma kaygısının değiştirilmesi belgenin hangi versiyonunun görüldüğünü etkiler? – Nikhil

0

Belge zaten mevcut olduğunda ve önceki belgeyle tam olarak aynıysa, hiçbir değişiklik gerekmeyecek ve bu nedenle, DocumentsAffected özelliği 0 olacaktır. Belgeyi buradan görebilirsiniz: https://docs.mongodb.org/manual/reference/method/WriteResult/#WriteResult. Bu özellikleri, sonucun Yanıt özelliğinde görebilirsiniz.

+0

Yukarıdaki belge için yaptığım sorgu yanlış değilse, belgenin bir favoriyi kaldırmış olması gerektiğinden eminim. Dokümanı MongoVUE kullanarak kontrol ettiğimde, kaldırmaya çalıştığım favoriyi gösterir. – Nikhil

+0

Güvenilir bir şekilde (veya güvenilmez bir şekilde) bir çoğaltma oluşturabilirseniz, jira.mongodb.org adresinden SERVER bileti gönderin. –