【问题标题】:updateDescription.updatedFields in Change Event From mongoDB is null来自 mongoDB 的更改事件中的 updateDescription.updatedFields 为空
【发布时间】:2026-01-27 06:15:02
【问题描述】:

我正在尝试查看 MongoDB 更改流中特定字段 status 的更新。

Change Event documentation 页面,更改流将输出此文档:

{
   _id : { <BSON Object> },
   "operationType" : "<operation>",
   "fullDocument" : { <document> },
   "ns" : {
      "db" : "<database>",
      "coll" : "<collection"
   },
   "documentKey" : { "_id" : <ObjectId> },
   "updateDescription" : {
      "updatedFields" : { <document> },
      "removedFields" : [ "<field>", ... ]
   }
}

我总是获取所有字段,但将 updateDescription.updatedFields 设置为 null。

这是我正在使用的 Java 代码

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase database = mongoClient.getDatabase("db");
MongoCollection<org.bson.Document> collection = database.getCollection("collection");
List<Bson> pipeline = Collections.singletonList(Aggregates.match(Filters.and(
        Document.parse("{'fullDocument.status':  { $in: [ 'DONE','ERROR'] }}"),
        Filters.exists("updateDescription.updatedFields.status",true),
        Filters.in("operationType", ("replace")))));

MongoCursor<ChangeStreamDocument<Document>> cursor = collection.watch(pipeline).iterator();

我在项目中使用这些依赖项

<mongo.java.driver>3.6.3</mongo.java.driver>

<spring.data.mongo.version>1.10.10.RELEASE</spring.data.mongo.version>

【问题讨论】:

    标签: java spring mongodb maven


    【解决方案1】:

    我解决了这个问题,我在 Robo 上使用“编辑文档”测试的问题。 “编辑文档”不会更新一个字段,它会将所有文档替换为具有相同 id 的新文档。

    【讨论】:

    • 很棒的收获。这也发生在 Studio 3T 中。
    最近更新 更多