2015-05-09 27 views
10

2.0 sürücüsüyle doğru şekilde "Çek (çıkar)" çalışmamda bana yardımcı olabilir misiniz?MongoDB .Net sürücüsü 2.0 Çekme (çıkarma elemanı)

Böyle bir koleksiyona sahibim ve follower alan adıyla ilk adımı fethiye olarak kaldırmak istiyorum.

{ 
    "_id": ObjectId("554e05dfc90d3d4dfcaa2aea"), 
    "username": "bodrum", 
    "followerList": [ 
    { 
     "_id": ObjectId("554e0625a51586362c33c6df"), 
     "follower": "fethiye", 
     "avatar": "fethiye.png" 
    }, 
    { 
     "_id": ObjectId("554e0625a51586362c33c6df"), 
     "follower": "izmir", 
     "avatar": "izmir.png" 
    } 
    ] 
} 

Bu sorguyu nasıl düzeltebilirim?

var filter = new BsonDocument("username", "bodrum"); 
var update = Builders<Person>.Update.Pull("followerList:follower", "fethiye"); 
Person pr = collection.FindOneAndUpdateAsync(filter, update).Result; 

Teşekkürler.

cevap

28

Dizi öğelerini kaldırmak için bir filtre kullanırken, Pull yerine (tüm öğelerle eşleşen) oluşturucuyu kullanmanız gerekir. lambdas kullanarak

var collection = db.GetCollection<Person>("people"); 
var filter = new BsonDocument("username", "bodrum"); 
var update = Builders<Person>.Update.PullFilter("followerList", 
    Builders<Follower>.Filter.Eq("follower", "fethiye")); 
var result = collection.FindOneAndUpdateAsync(filter, update).Result; 

Veya biraz daha özlü,:

var update = Builders<Person>.Update.PullFilter(p => p.followerList, 
               f => f.follower == "fethiye"); 
var result = collection 
    .FindOneAndUpdateAsync(p => p.username == "bodrum", update).Result; 
+1

Ne çıkarmak istiyorum belge bir seviye aşağıya olsaydı? Bu soruda olduğu gibi http://stackoverflow.com/questions/32995762/convert-mongodb-shell-query-to-c-sharp-query –

+0

Burada "koleksiyon" değişkeni nedir, bunun için bana kodu gösterebilir misiniz? Teşekkürler. – user734028

+1

@ user734028 Bunun için kod satırını ekledim. – JohnnyHK

İlgili konular