Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解码MongoDB resumeToken BSON_Python_Mongodb_Python 3.x_Pymongo - Fatal编程技术网

Python 解码MongoDB resumeToken BSON

Python 解码MongoDB resumeToken BSON,python,mongodb,python-3.x,pymongo,Python,Mongodb,Python 3.x,Pymongo,我最近开始测试ChangeStreams,这是MongoDB 3.6中添加的用于监视集合中的更改的新功能,但我无法解码resumeToken 我试过: resumeToken = change["_id"] # Check validity bson.is_valid(resume_token) 错误:TypeError:BSON数据必须是字节子类的实例 我想这意味着我需要直接访问二进制数据 print("is valid:", bson.is_valid(resume_token['_dat

我最近开始测试ChangeStreams,这是MongoDB 3.6中添加的用于监视集合中的更改的新功能,但我无法解码resumeToken

我试过:

resumeToken = change["_id"]
# Check validity
bson.is_valid(resume_token)
错误:TypeError:BSON数据必须是字节子类的实例

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

print("is valid:", bson.is_valid(resume_token['_data']))
有效:False

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

{
   _id : { <BSON Object> },
   "operationType" : "<operation>",
   "fullDocument" : { <document> },
   "ns" : {
      "db" : "<database>",
      "coll" : "<collection"
   },
   "documentKey" : { "_id" : <ObjectId> },
   "updateDescription" : {
      "updatedFields" : { <document> },
      "removedFields" : [ "<field>", ... ]
   }
}
有人知道如何解码resumeToken BSON文档吗

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

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

{ _id: { "_data": BinData(0, "...")
         "_typeBits": BinData(0, "...") 
       }
}
二进制数据构建在MongoDB服务器上,是的对象。对象按顺序编码为:clusterTime、documentKey、UUID。另见

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

注意:目前有一张与此相关的公开票证

我想解码它的原因是为了监控时间戳


根据您需要时间戳做什么,因为编码的内容从clusterTime开始,所以您实际上可以按时间顺序对二进制文件进行排序

确保resume\u令牌具有字段\u数据。通常情况下,它是一种数据。可能对于时间戳,您只需要resume_令牌。_idfor?@Valijon yes它有一个字段_data,'data'返回一个找不到密钥的错误。我会用一个例子来更新。好的。请尝试以下操作:bson.bson.decoderesume\u令牌。可行的解决方法:每次修改文档时,都要用时间戳更新字段。因此,可以从resume_token['fullDocument']printtoken:,bson.bson.decodeSurse_token:读取它。结果会导致TypeError:_bson_to_dict的参数必须是resume token中的字节对象。您能否像您的问题一样为变更事件添加文档打印输出?我希望动态构建一个resumeToken,以便从特定时间点开始应用操作。我想,如果我能解构这个结构,我也许能做到这一点。你可以缓存一个简历令牌,然后从那时起继续。我建议打开一个新的问题来描述您的用例。i、 e您可能会从使用事件驱动系统模式中获益。
{ _id: { "_data": BinData(0, "...")
         "_typeBits": BinData(0, "...") 
       }
}