Doctrine MongoDB ODM: как получить версию @Id для bin_md5

В Doctrine ODM (MongoDB) можно использовать аннотацию Doctrine\ODM\MongoDB\Mapping\Annotations\Id для установки идентификатора документа.

Поскольку я хочу использовать хэш в качестве идентификатора, я установил свой документ следующим образом:

class WebResource
{
    /**
     * @ODM\Id(strategy="NONE", type="bin_md5")
     *
     * @var string
     */
    private $hash;
    ...
}

Эта конфигурация преобразует хэш типа 774a0f33ede410cde2d785e2d9e52561 в _id: 'Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE='.

Теперь, когда я получаю $hash из документа, я получаю значение 774a0f33ede410cde2d785e2d9e52561.

Это лишает меня возможности использовать такой запрос в MongoDB Compass:

{"_id": "774a0f33ede410cde2d785e2d9e52561"}

Фактически, этот запрос всегда не возвращает никакого значения, поскольку фактический идентификатор равен Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE=.

Как я могу найти документ по его идентификатору, если только его хеш еще не преобразован?

Я пробовал много подходов:

  1. Использование функции md5() php;
  2. Использование (new Binary($resource->getHash(), Binary::TYPE_MD5))->getData()
  3. Использование new \MongoBinData($resource->getHash(), \MongoBinData::MD5)

Кажется, ничего из этих попыток не сработало.

Любые идеи?


person Aerendir    schedule 10.04.2019    source источник


Ответы (1)


Nzc0YTBmMzNlZGU0MTBjZGUyZDc4NWUyZDllNTI1NjE= просто закодирован в base64 774a0f33ede410cde2d785e2d9e52561

echo -n '774a0f33ede410cde2d785e2d9e52561' | base64

и используйте результат в compas

person Alex Blex    schedule 10.04.2019
comment
Так просто -..- «Спасибо! - person Aerendir; 10.04.2019