5

我在使用 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 在评论中指出的那样,我的原始查询可以用不同的方式编写。我已使用正确使用的 $and查询更新了问题。

4

1 回答 1

13

这是一个在 PHP 中用于 Mongo 查询的带有orand运算符的代码示例。

它使用与您将在查询中找到的不同的字段名称,但很容易理解如何使用它。

现在我没有时间更改它以匹配您的查询,但如果您对此有疑问,请告诉我,我会调整它。此查询正在运行并正在查找它应该找到的内容。

$arrFind = array(
    '$or' => array(
        array(
            '$and' => array(
                array(
                    UI_name => array(
                        '$regex' => 'andrew',
                        '$options' => 'i'
                    )
                ),
                array(
                    UI_surname => array(
                        '$regex' => 'mik',
                        '$options' => 'i'
                    )
                )
            )
        ),
        array(
            '$and' => array(
                array(
                    UI_surname => array(
                        '$regex' => 'andrew',
                        '$options' => 'i'
                    )
                ),
                array(
                    UI_name => array(
                        '$regex' => 'mik',
                        '$options' => 'i'
                    )
                )
            )
        ),
    )
);
于 2012-01-02T11:10:31.120 回答