使用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"}
事实上,此查询将始终不返回任何值,因为实际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中使用结果