解码MongoDB resumeToken BSON

2024-05-12 14:57:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始测试ChangeStreams,这是mongodb3.6中添加的用于监视集合中更改的新特性,我无法对resumeToken进行解码。在

我试过:

resumeToken = change["_id"]
# Check validity
bson.is_valid(resume_token)

Error: TypeError: BSON data must be an instance of a subclass of bytes

我想这意味着我需要直接访问二进制数据。在

^{pr2}$

is valid:False

我很困惑,因为查看ChangeStream Docs_id字段应该是BSON文档:

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

我想解码的原因是监视时间戳。有人知道如何解码resumeToken BSON文档吗?在

编辑:示例resumeToken

{'_data': b'\x82Z\xc2\x8c\xf3\x00\x00\x00\x01Fxtime\x00x\x80\x00\x01b\x87\xf6\x97\xb1d_id\x00dZ\xc2\x8c\xf3`\x88\x05\x00\x01\x98\xa4\xd8\x00Z\x10\x04\xac\x1eBC{\xf5E\xc4\xa0\xd8\x89\xca\x830\x99\x9e\x04'}

Tags: of文档iddatais解码documentx00
1条回答
网友
1楼 · 发布于 2024-05-12 14:57:21

Does anyone know how to decode the resumeToken BSON document?

默认情况下,MongoDB Drivers会为您解码此BSON文档。如您所见,其中有两个文档键:_data_typeBits。但是,这些键中包含的值是二进制数据。在

例如,在当前版本的MongoDB(3.6.3)中:

{ _id: { "_data": BinData(0, "...")
         "_typeBits": BinData(0, "...") 
       }
}

二进制数据在MongoDB服务器上构造,是KeyString的对象。对象按顺序编码:clusterTimedocumentKeyUUID。另请参见resume_token.cpp

在当前版本的MongoDB驱动程序中,没有可用的方法来解码客户端/应用程序端的KeyString对象。在

注意:目前有一张与此相关的未结票据SERVER-32283。在

The reason that I want to decode it is to monitor the timestamps

根据您需要这个时间戳的用途,因为编码的内容以clusterTime开头,所以实际上可以按时间顺序对二进制文件进行排序。在

相关问题 更多 >