С 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=
.
Как найти документ по его 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
Так просто... Спасибо!