如何搜索" referencesMany"字段数组的字段

时间:2017-03-10 08:41:48

标签: mongodb symfony doctrine

我们在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的组合。我们应该避免它,因为它似乎产生低效的查询(通过它只是我们的猜测)

问题是撰写此类查询的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

事实证明这比我想象的要简单。

只需通过引用带有 IN 表达式的字段和Ids数组来进行字段搜索。

$qb=$this->createQueryBuilder();
foreach($documents as $document) {
    $geoIds[] = $document->getId();
}
$qb->field('targetGeo')->in($geoIds);

我们一直在寻找解决方案,因为事实证明基于OR的查询(选项3)似乎没有使用索引。

我不知道这种方法是否记录在案,并没有找到它。如果有人能够指出一些关于这个技巧的文档,那将非常有用。