【问题标题】:How to query mongo in php?如何在php中查询mongo?
【发布时间】:2011-03-17 04:02:33
【问题描述】:

所以我有了这个简单的登录功能,它试图将电子邮件地址与数据库中的密码进行匹配,并将其与用户通过表单输入的数据进行比较。

function login($email, $password){
    $m = new Mongo("localhost"); 
    $m->connect();
    $db = $m->users;
    $collection = $db->test_collection;

    echo "<pre>";
    var_dump($collection->findOne(array('name' => 'john'))); //returns correctly
    var_dump($collection->find(array('name' => 'john'))); //returns mongo cursor object
    echo "</pre>";
}

我不明白为什么 find() 只返回一个游标对象。答案?

这是 mongo 文档

array(5) {
  ["_id"]=>
  object(MongoId)#22 (1) {
    ["$id"]=>"4d7eaa848baf84d32b000000"
  }
  ["activated"]=> (true)
  ["email"]=> "john@smith.com"
  ["name"]=> "john"
  ["password"]=> "334c4a4c42fdb79d7ebc3e73b517e6f8"
}

我将如何进行“WHERE”查询以在同一个文档中找到电子邮件和密码?我显然没有让 find() 和 findOne() 查询的参数正确。 PHP 中的正确语法是什么?

【问题讨论】:

    标签: php mongodb mongodb-php


    【解决方案1】:

    find 应该返回一个游标 - 你可以在这里阅读更多关于它们的信息:http://www.mongodb.org/display/DOCS/Queries+and+Cursors。 要从光标处获取文档,您必须对其进行迭代。

    在您的情况下,findOne 可能是您所追求的,因为您不希望多个用户具有相同的用户名和密码。 findOne 函数总是最多返回一个文档,因此不需要游标。

    要在查询中包含多个谓词,只需向查询数组中添加更多字段:

    var_dump($collection->findOne(array('name' => 'john', 'password' => '334c4a4c42fdb79d7ebc3e73b517e6f8')));
    

    (如果 PHP 正确的话——我的 PHP 有点生锈了)

    【讨论】:

      【解决方案2】:

      试试

      return count($collection->find(array('name' => $name, 'password' => $password)));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多