MongoDB更改流仅显示选定字段

MongoDB更改流仅显示选定字段,mongodb,watch,changestream,Mongodb,Watch,Changestream,我试图理解MongoDB中的变更流 我试图只显示更新文档的一些字段 所以我做了: option={ 'full_document':'updateLookup' } collection.watch([{"$match" : { "operationType" : "update" }}] , **option) 这是有效的 现在我只想显示一些字段 我试过: collection.watch([{"$match" : { "operationType" : "update" }},{"$p

我试图理解MongoDB中的变更流

我试图只显示更新文档的一些字段

所以我做了:

option={ 'full_document':'updateLookup' }
collection.watch([{"$match"  : { "operationType" : "update" }}] , **option)
这是有效的

现在我只想显示一些字段

我试过:

collection.watch([{"$match"  : { "operationType" : "update" }},{"$project":{"_id":1}}] , **option)

但两者都不起作用

如何仅显示选定的字段?

从中,更改流将输出此文档:

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

> db.test.insert({a:1, b:1, c:1, d:1})
变更流将输出:

{'a': 1.0,
 'fullDocument_id': ObjectId('5aa0c2300551e941c6958f86'),
 '_id': <BSON object>,
 'b': 1.0}
{'a':1.0,
“fullDocument_id”:ObjectId('5aa0c2300551e941c6958f86'),
“_id”:,
“b”:1.0}
注意:我将插入文档的
\u id
投影到
完整文档\u id
中。您可以将其投影到
\u id
(例如
\u id:'$fullDocument.\u id'
),但您将丢失更改流的原始
\u id
字段,其中包含

注意:在创建流时,我还使用了参数
full\u document='updateLookup'
。否则,完整文档将不会显示在
更新事件中。这一点在本手册中有解释

注意:上面的示例用于插入文档,但是您可以在
$project
阶段之前使用
$match:{operationType:'update'}
阶段轻松地为更新定制文档

注意:更新事件返回的
fullDocument
字段包含大多数提交给副本集成员的文档的查找版本。这可能是也可能不是已修改文档的版本。更新操作和将更改流返回给客户机之间的任何其他交错操作都可能改变了文档的版本。例如,删除事件可能导致
fullDocument
字段为
null
。有关更多详细信息,请参阅

> db.test.insert({a:1, b:1, c:1, d:1})
{'a': 1.0,
 'fullDocument_id': ObjectId('5aa0c2300551e941c6958f86'),
 '_id': <BSON object>,
 'b': 1.0}