Я пытаюсь объединить документы для получения массива со значениями нескольких документов.
Вот моя схема модели:
/**
* @var string
*
* @Mongo\Field(type="string", nullable=false)
*/
protected $name;
/**
* @var Collection
*
* @Mongo\ReferenceMany(targetDocument=Truck::class, inversedBy="circuits")
*/
protected $trucks;
/**
* @var Stand
*
* @Mongo\ReferenceOne(targetDocument=Stand::class, inversedBy="circuits")
*/
protected $stand;
Моя модель грузовика:
/**
* @var string
*
* @Mongo\Field(type="string", nullable=false)
*/
protected $code;
/**
* @var string
*
* @Mongo\Field(type="string", nullable=false)
*/
protected $name;
/**
* @var Collection
*
* @Mongo\ReferenceMany(targetDocument=Circuit::class, inversedBy="trucks")
*/
protected $circuits;
Модель моего стенда:
/**
* @var string
*
* @Mongo\Field(type="string", nullable=false)
*/
protected $name;
/**
* @var ArrayCollection
*
* @Mongo\ReferenceMany(targetDocument=Truck::class, inversedBy="stand", cascade={"persist", "remove"})
*/
protected $trucks;
Моя проблема в том, что я не могу вернуть схему с подставкой и кодом грузовика:
Мой токовый выход выглядит так:
{
"_id" : "5bcdd97724083a098f30bdcc",
"nom" : "First Circuit",
"stand" : {
"$ref" : "stand",
"$id" : "5bcdd97424083a098f30bd85",
"$db" : "my_db"
},
"trucks" : [
{
"$ref" : "truck",
"$id" : "5bcdda0324083a099745b22e",
"$db" : "my_db"
}
],
"createdAt" : ISODate("2018-10-22T14:06:47.541Z"),
"updatedAt" : ISODate("2018-10-22T14:06:47.541Z")
}
Однако я хотел бы получить такой вывод:
{
"_id" : "5bcdd97724083a098f30bdcc",
"name" : "First Circuit",
"stand" : {
"name": "Stand name"
},
"trucks" : [
{
"code": "Truck code 1"
},
{
"code": "Truck code 2"
}
],
"createdAt" : ISODate("2018-10-22T14:06:47.541Z"),
"updatedAt" : ISODate("2018-10-22T14:06:47.541Z")
}
В настоящее время я установилпервый запрос к документу схемы, подобный этому:
$queryBuilder = $this->createQueryBuilder()
->find()
->select(['name', 'trucks'])
->field('stand.id')
->equals($id)
->field('date')
->gte($startOfDay)
->lte($endOfDay)
->hydrate(false)
->eagerCursor(true);
Для лучшего понимания я пытаюсь получить эквивалент этого запроса SQL:
SELECT circuit.name, truck.code, stand.name FROM circuit INNER JOIN truck (I do not set the ON clause, because here is a nested document) INNER JOIN stand WHERE date >= '2018-10-22 00:00:00' AND date <= '2018-10-22 23:59:59';
Не могли бы вы помочь мне установитьправильный запрос монго / доктрины, пожалуйста?
Заранее спасибо,