MongoDB .Net驱动2.0拉(删除元素)

你能用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.Update.Pull("followerList:follower", "fethiye"); Person pr = collection.FindOneAndUpdateAsync(filter, update).Result; 

谢谢。

使用filter删除数组元素时,需要使用PullFilter构建器而不是Pull (与整个元素匹配)。

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

或者更简洁一点,使用lambdas:

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

这是我用来删除嵌套数组对象

-parentpath: followerList
-propertie: follower
fethiye.pngfethiye.png

 var filter = new BsonDocument("_id", ObjectId.Parse(id)); var updateValues = Builders.Update.PullFilter(parentPath, Builders.Filter.Eq(propertie, value)); DatabaseCollection.FindOneAndUpdate(filter, updateValues); 

删除更深层嵌套数组对象的示例:
让我们删除名为Doe的对象

-parentPath: followerList.0.testArray
-propertie: name
值: Doe

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