我最近开始测试 ChangeStreams,这是 MongoDB 3.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
好的,我想这意味着我需要直接访问二进制数据。
print("is valid:", bson.is_valid(resume_token['_data']))
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'}
有谁知道如何解码 resumeToken BSON 文档?
默认情况下,MongoDB 驱动程序会为您解码此 BSON 文档。如您所见, :_data
和 中有两个文档键_typeBits
。但是,这些键中包含的值是二进制数据。
例如在当前版本的 MongoDB (3.6.3) 中:
{ _id: { "_data": BinData(0, "...")
"_typeBits": BinData(0, "...")
}
}
二进制数据是在 MongoDB 服务器上构建的,是KeyString的对象。对象使用(按顺序)编码:clusterTime
, documentKey
, UUID
。另见resume_token.cpp
对于 MongoDB 驱动程序的当前版本,没有可用的方法来解码KeyString
客户端/应用程序端的对象。
注意:目前有一个与此相关的开放票证SERVER-32283。
我想解码它的原因是为了监视时间戳
根据您需要此时间戳的用途,因为编码的内容以clusterTime
您实际上可以按时间顺序对二进制进行排序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句