【问题标题】:Find field in MongoDB where field is not empty (in PHP)在 MongoDB 中查找字段不为空的字段(在 PHP 中)
【发布时间】:2013-04-16 02:48:09
【问题描述】:

这可能是一件很容易做到的事情,但我对 MongoDB 还很陌生,很难正确地使用这个词。

我正在从数据库中提取线索,并且我只希望它提取电子邮件字段不为空的记录。如果记录不为空,我尝试放入语句以跳过记录,但是有许多字段不为空,但其中也没有任何字符。这是我的 MongoDB 查询:

$records = $dbh->find('email' => array('$ne' => null))->limit(2000);

我也尝试了'email' => array('$ne' => '')),但这也没有成功。

有没有简单的方法来做到这一点?我知道在 MySQL 中这将是一个简单的 where email != "",但我仍在学习如何使用 Mongo :) 谢谢!

【问题讨论】:

    标签: php mongodb


    【解决方案1】:

    试试这个,你不正确地包含在数组中

     $records =      $dbh->find(array("email" => array('$ne' => null)))->limit(2000);
    

    【讨论】:

    • 嗯……这行得通,它实际上返回了更多带有电子邮件的记录,但仍然有一些空字段(可能除了空格之外什么都没有?)。感谢您对数组的更正,这很好知道。
    【解决方案2】:

    好的,我只是想出了一个不错的方法,并将它发布给像我这样有同样问题的任何其他“菜鸟”:)

    我将 '$nin' 与一个数组一起使用,它解决了这个问题。这是我现在的查询:

    $records = $dbh->find(array("email" => array('$nin' => array(' ','',null))))->limit(2000);

    【讨论】:

      【解决方案3】:

      在失败了 3 个小时后,我设法以一种棘手的方式做到了:

      find('field' => array('$regex' => '.*'))

      【讨论】:

        【解决方案4】:
        $records = $dbh->find('$or'=>array(
            array('email'=>array('$exists' => false)),
            array('email'=>array('$ne' => null)),
            array('email'=>array('$ne' => ''))
        ));
        

        【讨论】:

          【解决方案5】:

          你也可以这样做

          $records = $dbh->find(array('$where' => 'this.email && this.email.length'))->limit(2000);
          

          【讨论】:

            猜你喜欢
            • 2019-07-11
            • 2022-01-09
            • 1970-01-01
            • 2020-08-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多