我最近开始测试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'}
默认情况下,MongoDB Drivers会为您解码此BSON文档。如您所见,其中有两个文档键:
_data
和_typeBits
。但是,这些键中包含的值是二进制数据。在例如,在当前版本的MongoDB(3.6.3)中:
二进制数据在MongoDB服务器上构造,是KeyString的对象。对象按顺序编码:
clusterTime
,documentKey
,UUID
。另请参见resume_token.cpp在当前版本的MongoDB驱动程序中,没有可用的方法来解码客户端/应用程序端的
KeyString
对象。在注意:目前有一张与此相关的未结票据SERVER-32283。在
根据您需要这个时间戳的用途,因为编码的内容以
clusterTime
开头,所以实际上可以按时间顺序对二进制文件进行排序。在相关问题 更多 >
编程相关推荐