Doctrine MongoDB ODM:如何获取特定PHP嵌入式文档的文档?

时间:2018-08-27 16:31:20

标签: mongodb symfony4 doctrine-odm

上下文: 具有主义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();

但是:

  • 按字段进行查询以具有正确的结构
  • 我必须反序列化它才能获得PHP文档

问题:

是1)还是2)做到这一点的方法?如果不是,使用教义的正确方法是什么?还是避免使用教义:D?

当然,我的示例很简单,但是解决方案必须处理更大,深度更大的文档。

还是我必须进行另一个收集(攻击)并使用引用?

TY

0 个答案:

没有答案
相关问题