MongoDB/主义:不能在$和中嵌套$或 [英] MongoDB/doctrine: can't nest $or in $and

查看:0
本文介绍了MongoDB/主义:不能在$和中嵌套$或的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

$and操作中嵌套多个双操作数操作时遇到问题。this discussion的结论听起来与我需要的类似,但我无法使其工作。以下是我正在尝试做的事情的Java脚本:

db.Business.find(
  {
    $and:
      [
        { $or: [{nm: /American/}, {dsc: /American/}] },
        { $or: [{nm: /Mega/}, {dsc: /Mega/}] }
      ]
  }
)

它在MongoDB交互外壳中工作。

下面是一些在我看来还可以但不起作用的PHP(在指定的地方会导致无限递归):

$q = $doctrineOdm->createQueryBuilder('Business');
foreach (array('American','Mega') as $keyword) {
  $r = new MongoRegex('/'.$keyword.'/i');
  $q->addAnd(
    $q->addOr($q->expr()->field('nm')->equals($r))
      ->addOr($q->expr()->field('dsc')->equals($r))
  );
}
print_r($q->getQuery()->getQuery()); // infinite recursion
$cursor = $q->getQuery()->execute();

有什么想法吗?

Crossposted here

推荐答案

在将其添加到$q之前,您似乎需要构建一个单独的子查询。

$q->addAnd(...)立即求值并将其自身添加到$q,但您希望它等待。

我没有安装此程序包,因此无法进行测试,但这只是我的直觉。希望能有所帮助。

$q = $doctrineOdm->createQueryBuilder('Business');
foreach (array('American','Mega') as $keyword) {
  $r = new MongoRegex('/'.$keyword.'/i');
  $q->addAnd(
    $q->expr()->addOr($q->expr()->field('nm')->equals($r))
              ->addOr($q->expr()->field('dsc')->equals($r))
  );
}
print_r($q->getQuery()->getQuery()); // infinite recursion
$cursor = $q->getQuery()->execute();

这篇关于MongoDB/主义:不能在$和中嵌套$或的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆