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.png
: fethiye.png
var filter = new BsonDocument("_id", ObjectId.Parse(id)); var updateValues = Builders
删除更深层嵌套数组对象的示例:
让我们删除名为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" } ] }