Doctrine MongoDB ODM:如何获取@Id的bin_md5版本

问题描述 投票:0回答:1

使用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找到文档,只有其哈希值仍未转换?

我尝试了很多方法:

  1. 使用md5() php函数;
  2. 使用(new Binary($resource->getHash(), Binary::TYPE_MD5))->getData()
  3. 使用new \MongoBinData($resource->getHash(), \MongoBinData::MD5)

这些尝试中没有任何东西似乎有效。

有任何想法吗?

php mongodb doctrine doctrine-odm
1个回答
0
投票

Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE=只是base64编码的774a0f33ede410cde2d785e2d9e52561

echo -n '774a0f33ede410cde2d785e2d9e52561' | base64

并在compas中使用结果

© www.soinside.com 2019 - 2024. All rights reserved.