上下文: 具有主义ODM的MongoDB 4和Symfony 4
文档示例:
{
id: "pikachu",
name: "Pikachu,
attacks: [
{
name: "Charge",
power: 40,
},
{
name: "Thunder",
power: 80,
}
]
}...
如何获取名称为“ Thunder”的对象App \ Document \ Pokemon \ Attack?
1)
在PHP中循环并找到它
但是:
2)
使用查询生成器进行汇总,并将结果作为PHP数组获取:
$dm->createAggreationBuilder(Pokemon::class)
->unwind('$attacks')
->match()->field('attacks.name')->equals('Thunder')
->project()->excludeField(['_id'])
->field('name')->expression('$attacks.name')
->field('power')->expression('$attacks.power')
->execute()->getSingleResult();
但是:
问题:
是1)还是2)做到这一点的方法?如果不是,使用教义的正确方法是什么?还是避免使用教义:D?
当然,我的示例很简单,但是解决方案必须处理更大,深度更大的文档。
还是我必须进行另一个收集(攻击)并使用引用?
TY