ruby MongoDB更改流-从二进制BSON解码UUID [重复]

wqsoz72f  于 2023-06-22  发布在  Ruby
关注(0)|答案(1)|浏览(127)

此问题已在此处有答案

How to convert a Base64 encoded string to UUID format(2个答案)
16天前关闭
我正在尝试MongoDB更改流,遇到了一个与数据解码相关的问题。在我的应用程序(java)中,我使用UUID存储在Mongo中的文档。当我打开我想要监听的集合的变更流时,文档id(变更对象规范中的:document_key)看起来像这样:

{"_id"=><BSON::Binary:0x31777440 type=uuid data=0xb426135aabd24af2...>}}

我不清楚我应该如何将其解码回原始UUID。如果我在ID上运行.to_json,我会得到这个:

{“$binary”:{“base64":“rpUsTqcGSZ+YPDzebvq2aA==“,”subType”:“04”}}

然后,解码“base64”字段会产生以下无意义的结果:

,NI<<nh
fykwrbwg

fykwrbwg1#

解决了!下面的示例代码。

# Decodes bson_id
  def decode_bson_id(document_key)
    as_json = JSON.parse(document_key.to_json)
    begin
      b64_doc_id = as_json["_id"]["$binary"]["base64"]
      decoded_uuid = b64_doc_id.unpack("m0").first.unpack("H8H4H4H4H12").join('-')
    rescue Exception => e
      puts "Failed in the bson decoding: #{e}"
      return nil
    end
    if decoded_uuid
      decoded_uuid
    end
  end

相关问题