我们在Document中有一个referenceMany字段。在db中,它变成了一个被引用的文件ID数组。
@MongoDB \ ReferenceMany(targetDocument =" GeoLocation",storeAs =" id",simple = true)
现在我们要在此集合中搜索引用文档A或B或C的文档。
1)第一个直观的方法就是做$queryBuilder->field('geo')->references([A,B,C])
但似乎"参考"只接受单个文档,而不接受它们的数组。
2)另一个直观的approch 将使用 - > in,但它只接受值,而不是引用。
3)我们想要做的最后一件事是使用OR的组合。我们应该避免它,因为它似乎产生低效的查询(通过它只是我们的猜测)
问题是撰写此类查询的最佳方式是什么?
答案 0 :(得分:0)
事实证明这比我想象的要简单。
只需通过引用带有 IN 表达式的字段和Ids数组来进行字段搜索。
$qb=$this->createQueryBuilder();
foreach($documents as $document) {
$geoIds[] = $document->getId();
}
$qb->field('targetGeo')->in($geoIds);
我们一直在寻找解决方案,因为事实证明基于OR的查询(选项3)似乎没有使用索引。
我不知道这种方法是否记录在案,并没有找到它。如果有人能够指出一些关于这个技巧的文档,那将非常有用。