Пускай у меня будет такая структура json в mongoDb:
{ "_id" : ObjectId("6182d3b232d0ae1e4323abc7"), "status" : NumberInt(1), "variants" : [ { "id" : "6182d3b2b6ced", "url" : "2021/10/filename1", "apps" : { "100020" : "2.2.0", "100100" : null }, }, { "id" : "6182d3b2b6d03", "apps" : { }, } ], }, { "_id" : ObjectId("6182d3b232d0ae1e4323abc8"), "status" : NumberInt(1), "variants" : [ { "id" : "idid1", "url" : "2021/10/filename2", "apps" : { "100020" : "2.2.0", }, } ], }
Использую Doctrine и ODM. Нужно получить все записи из mongoDb где поле с типом hash является пустым объектом, то есть не имеет ни одного значения. В примере выше: это строки 15-17, где поле "apps" пустой объект в mongoDb.
Иными словами, нужно достать все документы, где "variants.apps" (field type="hash") пустой (т.е. поле является пустым объектом).
Если в doctrine repository сделать поиск и в условии указать пустой массив:
<?php class AssetRepository extends DocumentRepository { /** * @return Asset[] */ public function findWithEmptyApps(): array { return $this->findBy( [ 'variants.apps' => [], ] ); } }
То вернет 0 строк. То есть не подходит вариант.
Если же массив кастануть к пустому объекту в PHP-коде:
'variants.apps' => (object) []
то вернет запись с {_id:6182d3b232d0ae1e4323abc7}
как и ожидается:
<?php class AssetRepository extends DocumentRepository { /** * @return Asset[] */ public function findWithEmptyApps(): array { return $this->findBy( [ 'variants.apps' => (object) [], ] ); } }
Комментарии 0