gpt4 book ai didi

php - MongoDB/Doctrine : can't nest $or in $and

转载 作者:IT老高 更新时间:2023-10-28 13:25:39 25 4
gpt4 key购买 nike

我在 $and 操作中嵌套多个二操作数 $or 操作时遇到问题。 this discussion的结论听起来与我需要的相似,但我无法让它工作。这是我正在尝试做的 JavaScript:

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

这在 MongoDB 交互式 shell 中有效。

这里有一些 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();

关于php - MongoDB/Doctrine : can't nest $or in $and,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com