2015-05-09 30 views
10

你能幫我用2.0驅動程序正確運行「拉(刪除)」。MongoDB .Net驅動程序2.0拉(刪除元素)

我有一個這樣的集合,我想刪除跟隨者字段名爲fethiye的第一個追隨者。

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

我該如何解決這個問題?

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

謝謝。

回答

28

使用過濾器刪除數組元素時,您需要使用構建器而不是Pull(它匹配整個元素)。

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; 

或稍微更簡潔,使用lambda表達式:

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

如果我們在想拉文件是一個更深層次?在這個問題http://stackoverflow.com/questions/32995762/convert-mongodb-shell-query-to-c-sharp-query –

+0

什麼是「收集」變量在這裏,你能告訴我的代碼嗎?謝謝。 – user734028

+1

@ user734028我爲此添加了一行代碼。 – JohnnyHK

相關問題