【问题标题】:MongoDB multiple $and operators query in PHPPHP中的MongoDB多个$和运算符查询
【发布时间】: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


【解决方案1】:

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

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

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

$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-05-21
    • 1970-01-01
    • 2012-01-03
    • 2023-03-22
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多