从php中的蒙古德(MongoDB)获取UUID



我在mongodb中有一个二进制uuid,它使用java保存到mongodb。看起来像字符串格式:

9adc22fe-b775-4913-aee8-3d529ad74d5e

保存到mongodb时,看起来像这样:

Binary('k0HT91W0Q/mU02IsyeFttg==')

我已经使用MongoDB PHP驱动程序从该集合中获取它,给出了:

object(MongoDBBSONBinary)#22 (2) { ["data"]=> string(16) "Iu��"ܚ]LלR=�" ["type"]=> int(3) }

我知道我可以使用$var->getData()提取数据,但是我缺少最终过程将其恢复到上面的字符串格式。我尝试使用base64_decodebin2hex和其他一些方法,但是它们返回不正确的值。

如何获得存储在mongodb中的uuid的字符串值?

任何帮助将不胜感激,谢谢

我通过使用uuidhelpers.js的tojuuid方法来自己解决这个问题,在php中写下它:

$hex = bin2hex($uuid->getData());
$msb = substr($hex, 0, 16);
$lsb = substr($hex, 16, 16);
$msb = substr($msb, 14, 2) . substr($msb, 12, 2) . substr($msb, 10, 2) . substr($msb, 8, 2) . substr($msb, 6, 2) . substr($msb, 4, 2) . substr($msb, 2, 2) . substr($msb, 0, 2);
$lsb = substr($lsb, 14, 2) . substr($lsb, 12, 2) . substr($lsb, 10, 2) . substr($lsb, 8, 2) . substr($lsb, 6, 2) . substr($lsb, 4, 2) . substr($lsb, 2, 2) . substr($lsb, 0, 2);
$hex = $msb . $lsb;
$uuid = substr($hex, 0, 8) . '-' . substr($hex, 8, 4) . '-' . substr($hex, 12, 4) . '-' . substr($hex, 16, 4) . '-' . substr($hex, 20, 12);
然后,我想将Java UUID转换回BSON二进制格式(3型),我也使用uuidhelpers.js(使用Juuid方法)将其做到了,在php中看起来像以下内容:
$hex = str_replace("-", "", $uuid);
$msb = substr($hex, 0, 16);
$lsb = substr($hex, 16, 16);
$msb = substr($msb, 14, 2) . substr($msb, 12, 2) . substr($msb, 10, 2) . substr($msb, 8, 2) . substr($msb, 6, 2) . substr($msb, 4, 2) . substr($msb, 2, 2) . substr($msb, 0, 2);
$lsb = substr($lsb, 14, 2) . substr($lsb, 12, 2) . substr($lsb, 10, 2) . substr($lsb, 8, 2) . substr($lsb, 6, 2) . substr($lsb, 4, 2) . substr($lsb, 2, 2) . substr($lsb, 0, 2);
$hex = $msb . $lsb;
$uuid = hex2bin($hex);
$uuid = new MongoDBBSONBinary($uuid, 3);

最新更新