你能帮我用2.0驱动程序正确运行" pull (移除)"吗.

我有一个这样的集合,我想删除第一个名为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;

谢谢

推荐答案

使用过滤器删除数组元素时,需要使用PullFilter生成器,而不是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;

或者更简洁地说,使用lambdas:

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

Mongodb相关问答推荐

使用查询参数过滤MongoDB Go驱动程序时出现问题

数组相等条件返回的文档多于与相等匹配的文档:MongoDB

无法从我的NextJS 14应用程序中的Redux工具包2.0中提取数据

如何使用ID数组对一个集合中的金额求和并更新另一个集合中的字段?

在MongoDB集合中按文档内的频率对数组排序

Mongo $sort然后$group,顺序能保证吗?

尽管前一阶段输出文档,$group stage 仍返回零文档

错误起草的 MongoDB 聚合管道 $match 阶段

随着时间的推移在 mongodb 中获得

如何修改 mongodb 中嵌套对象数组中的字段名称/键?

从 node.js 的 mongodb 集合中删除文档

如何在 Mongoose 中定义一个通用的嵌套对象

MongoError:$subtract 累加​​器是一元运算符

.insertOne 不是函数

Mongo DB中的Upserting和Id问题

如何为 node.js 中的 MongoDB 索引指定 javascript 对象中的属性顺序?

在 mongodb 中插入当前日期时间

如何使用 Pymongo 在 MongoDB 中 Select 单个字段?

Pymongo/bson:将 python.cursor.Cursor 对象转换为可序列化/JSON 对象

MongoDB Compass:select distinct field values