在PHP中从MongoDB获取UUID
我在MongoDB中有一个二进制UUID,它是使用Java保存到MongoDB的。字符串格式如下所示:在PHP中从MongoDB获取UUID,php,mongodb,uuid,Php,Mongodb,Uuid,我在MongoDB中有一个二进制UUID,它是使用Java保存到MongoDB的。字符串格式如下所示: 9adc22fe-b775-4913-aee8-3d529ad74d5e 保存到MongoDB时,显示如下: Binary('k0HT91W0Q/mU02IsyeFttg==') 我已经使用MongoDB PHP驱动程序从集合中获取了它,给出了以下内容: object(MongoDB\BSON\Binary)#22 (2) { ["data"]=> string(16) "Iu��"
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\u decode
、bin2hex
和其他一些方法,但它们返回的值不正确
如何获取存储在MongoDB中的UUID的字符串值
任何帮助都将不胜感激,
谢谢我自己通过使用中的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,使用JUID方法,在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);
我自己通过使用中的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,使用JUID方法,在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);