用PHP从MongoDB获取UUID

时间:2017-12-17 22:28:15

标签: java php mongodb uuid

我在MongoDB中有一个使用Java保存到MongoDB的二进制UUID。它看起来像字符串格式:

9adc22fe-b775-4913-aee8-3d529ad74d5e

保存到MongoDB时,它显示如下:

Binary('k0HT91W0Q/mU02IsyeFttg==')

我已经使用MongoDB PHP驱动程序从集合中获取它,并提供:

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

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

如何获取MongoDB中存储的UUID的字符串值?

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

1 个答案:

答案 0 :(得分:0)

我已经设法通过使用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 MongoDB\BSON\Binary($uuid, 3);