MongoDB在PHP中多个$和运算符查询

Chr*_*n P 5 php mongodb mongodb-php

我使用PHP数组语法遇到了这个MongoDB查询的问题.这是我想要使用的查询的直接版本.

db.collection.find({
        $or: [
            {$and : [{X:1}, {X: {$gt: 100}}]},
            {$and : [{X:2}, {X: {$lt: 100}}]}
        ]
});
Run Code Online (Sandbox Code Playgroud)

注意:真正的查询更复杂,这只是一个例子.

我无法在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);
Run Code Online (Sandbox Code Playgroud)

但是这个查询不会返回任何结果.显然我们无法$and从数组中删除,因为我们不能在PHP数组中有重复的键.

我不想使用JavaScript表达式,因为速度至关重要.

更新:正如Alexander Azarov在评论中指出的那样,我的原始查询可以用不同的方式编写.我已使用正确使用的$and查询更新了问题 .

Sal*_*ali 12

下面是代码的一个示例在PHP运营商用于蒙戈查询.

它使用您在查询中找到的不同字段名称,但了解如何使用它很简单.

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

$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'
                    )
                )
            )
        ),
    )
);
Run Code Online (Sandbox Code Playgroud)