【问题标题】:Doctrine MongoDB ODM: how to get the bin_md5 version of the @IdDoctrine MongoDB ODM:如何获取 @Id 的 bin_md5 版本
【发布时间】:2023-03-10 18:37:01
【问题描述】:

使用 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】:

    Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE= 只是 base64 编码的774a0f33ede410cde2d785e2d9e52561

    echo -n '774a0f33ede410cde2d785e2d9e52561' | base64
    

    并在 compas 中使用结果

    【讨论】:

    • 这么简单-.-' 谢谢!
    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 2011-09-03
    • 2017-08-13
    • 1970-01-01
    • 2016-08-26
    • 2017-08-14
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多