我想用Document Nested in an Array queries
执行Doctrine mongodb odm query builder我的基本结构类似于:
db.inventory.insertMany([
{item:“journal”,instock:[{仓库:“A”,数量:5},{ 仓库:“C”,数量:15}]},
{item:“notebook”,instock:[{仓库:“C”,数量:5}]},
{item:“postcard”,instock:[{仓库:“B”,数量:15},{ 仓库:“C”,数量:35}]}
]);
我想在查询构建器
中执行此shell查询db.inventory.find({“instock”:{仓库:“A”,数量:5}})
我试过这个,但这不起作用,因为它忽略了'instock'字段。
$ QB->字段( '的inStock') - >字段( '仓库') - >等于( 'A') - >字段( '数量') - >等于(5)
请记住,请执行以下操作
$ QB->字段( 'instock.warehouse') - >等于( 'A') - >字段( 'instock.qty') - >等于(5)
是一个不同的逻辑(check second example),因为它不一定匹配相同的嵌入文档。
我可以使用$ where和一个循环实现它,但它很丑陋而且很慢。任何更好的想法?
答案 0 :(得分:1)
ODM通过查询构建器支持嵌入式文档,因此您可以执行以下操作:
$qb->field('instock')->equals(new InStock('A', 5));
如果使用对象不是您想要的,我认为您可以取消关联数组而不是new InStock()
。
答案 1 :(得分:1)
使用$ elemMatch,这是解决此问题的方法:
$qb->expr()->field('instock')->elemMatch(
$qb->expr()
->field('warehouse')->equals('A')
->field('qty')->equals(5)
);