我在 $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/
相关文章:
ruby-on-rails - 获取字段最大值的对象[Mongoid]
mongodb - 我可以/应该在 Mongoose 中索引嵌入的文档吗?
mongodb - mongoose 更新 MongoDB 中的字段不起作用
mongodb - 处理 100+ 百万条记录的最佳 NoSQL 方法
mongodb - 设置 MongoDB 数据库配额 (SIZE)
node.js - 我应该将图像存储在 MongoDB 中还是本地文件系统中(通过 Node.js)
mongodb - 当数据库大小大于 RAM 时,MongoDB 可以工作吗?
java - 如何使用 $ne 运算符查询 mongodb?