Doctrine MongoDB ODM:如何获取 @Id 的 bin_md5 版本
Doctrine MongoDB ODM: how to get the bin_md5 version of the @Id
使用 Doctrine ODM (MongoDB) 可以使用注释 Doctrine\ODM\MongoDB\Mapping\Annotations\Id
来设置文档的 ID。
因为我想使用散列作为 ID,所以我这样设置我的文档:
class WebResource
{
/**
* @ODM\Id(strategy="NONE", type="bin_md5")
*
* @var string
*/
private $hash;
...
}
此配置将 774a0f33ede410cde2d785e2d9e52561
之类的哈希转换为 _id: 'Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE='
。
现在,当我从文档中获取 $hash
时,我获取了值 774a0f33ede410cde2d785e2d9e52561
。
这让我无法在 MongoDB Compass:
中使用这样的查询
{"_id": "774a0f33ede410cde2d785e2d9e52561"}
实际上,此查询将始终 return 没有值,因为实际 ID 是 Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE=
。
如何通过 ID 找到文档,只有它的哈希值还没有转换?
我尝试了很多方法:
- 使用
md5()
php函数;
- 使用
(new Binary($resource->getHash(), Binary::TYPE_MD5))->getData()
- 使用
new \MongoBinData($resource->getHash(), \MongoBinData::MD5)
这些尝试似乎都不起作用。
有什么想法吗?
Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE=
只是 base64 编码 774a0f33ede410cde2d785e2d9e52561
echo -n '774a0f33ede410cde2d785e2d9e52561' | base64
并在 compas
中使用结果
使用 Doctrine ODM (MongoDB) 可以使用注释 Doctrine\ODM\MongoDB\Mapping\Annotations\Id
来设置文档的 ID。
因为我想使用散列作为 ID,所以我这样设置我的文档:
class WebResource
{
/**
* @ODM\Id(strategy="NONE", type="bin_md5")
*
* @var string
*/
private $hash;
...
}
此配置将 774a0f33ede410cde2d785e2d9e52561
之类的哈希转换为 _id: 'Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE='
。
现在,当我从文档中获取 $hash
时,我获取了值 774a0f33ede410cde2d785e2d9e52561
。
这让我无法在 MongoDB Compass:
中使用这样的查询{"_id": "774a0f33ede410cde2d785e2d9e52561"}
实际上,此查询将始终 return 没有值,因为实际 ID 是 Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE=
。
如何通过 ID 找到文档,只有它的哈希值还没有转换?
我尝试了很多方法:
- 使用
md5()
php函数; - 使用
(new Binary($resource->getHash(), Binary::TYPE_MD5))->getData()
- 使用
new \MongoBinData($resource->getHash(), \MongoBinData::MD5)
这些尝试似乎都不起作用。
有什么想法吗?
Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE=
只是 base64 编码 774a0f33ede410cde2d785e2d9e52561
echo -n '774a0f33ede410cde2d785e2d9e52561' | base64
并在 compas
中使用结果