【发布时间】:2012-01-01 17:58:34
【问题描述】:
我在使用 PHP 数组语法的 MongoDB 查询时遇到问题。这是我要使用的查询的直接版本。
db.collection.find({
$or: [
{$and : [{X:1}, {X: {$gt: 100}}]},
{$and : [{X:2}, {X: {$lt: 100}}]}
]
});
注意:真正的查询比较复杂,这只是一个例子。
我在 PHP 中找不到一些描述这种查询的示例。 我想出的最好的是:
$query = array(
'$or' => array(
array(
'$and' => array(
array('X' => 1),
array('X' => array('gt' => 100))
)
),
array(
'$and' => array(
array('X' => 2),
array('X' => array('lt' => 100))
)
),
)
);
$this->db->collection->find($query);
但是这个查询没有返回任何结果。
显然我们不能从数组中删除$and,因为我们不能在 PHP 数组中有重复的键。
我不想使用 JavaScript 表达式,因为速度很关键。
更新:正如 Alexander Azarov 在 cmets 中指出的那样,我的原始查询可以用不同的方式编写。我已使用正确使用的 $and 查询更新了问题。
【问题讨论】:
-
究竟是什么不起作用?你有错误信息吗?
-
查询执行正常但返回0个结果。
-
您能发布一个示例数据转储吗?
-
顺便说一句,@ChristianP,你在这里不需要
$and。{X:1, Y: {$all: [5,6,7]}}应该可以工作。 -
mongo shell 中的等效查询能找到这些记录吗?
标签: php mongodb mongodb-php