【问题标题】:mongodb php findone() by IDmongodb php findone() 按 ID
【发布时间】:2011-09-27 06:43:42
【问题描述】:

此代码不会根据 ID 搜索找到记录

<?php

$userid = $_GET['id'];

$theObjId = new MongoId($userid); 

$connection = new Mongo('localhost');

$db = $connection->test->items; 

$item = $db->findOne(array('_id' => $theObjId));

echo 'Item: ' . $item . '<br>';

echo 'UserID: ' . $userid . '<br>';

echo 'TheObjID: ' . $theObjId;

$connection->close(); 

?>

$userid 由另一个 .php 文件中的表单提供

这是输出 ....

$item: Array

 $userid: 4e0dfc8e7bfb8bac12000000

 $theObjId: 4e0dfc8e7bfb8bac12000000

输出证明我的变量包含 ID

【问题讨论】:

    标签: php mongodb


    【解决方案1】:

    如果你使用这个official driver那么你应该使用这个

    $item = $db->findOne(array('_id' => new MongoDB\BSON\ObjectId($userid));
    

    【讨论】:

      【解决方案2】:

      我只是不得不这样做,并且不认为其他答案回答了这个问题。

      简单来说,通过 Mongo ID(_id 字段)查询,使用MongoId 对象,然后使用iterator_to_array 函数,它有效地将迭代器复制到适合迭代的数组中:

      <?php
      
          $doc_id = "4f917f15168cbe6364000032";
      
          $cursor = $collection->find(
              array(
                  '_id' => new MongoId($doc_id)
              )
          );
      
          $cursor2array = iterator_to_array($cursor);
          echo "<pre>"; print_r($cursor2array); echo "</pre>";
      
          foreach ( $cursor2array[$doc_id] as $key => $value )
          {
               echo "$key => $value <br/>";
          }
      
      ?>
      

      【讨论】:

      • 您可以简单地使用findOne,无需使用iterator_to_array。关键是在查询中使用MongoId
      【解决方案3】:

      MongoDB 需要整数变量来创建正确的查询。

      在我的项目中它是这样工作的:

      <?php
      $id = (int)$_GET["id"]; 
      $cursor = $this->connect()->$db->$collection->find(array('_id' => $id));
      

      希望这对某人有所帮助!

      【讨论】:

      • (int)$_GET["id"]; (string)$_GET["id"]; 有何不同?
      【解决方案4】:

      这篇文章有点陈旧,但如果有人正在研究这个问题,这里有几个需要考虑的事项:

      1) $item 是一个数组,所以代码应该更像这样:

      echo 'Item: ' . $item['name'] . '<br>';
      

      2) 另外,userid 和 itemid 似乎在原始帖子中混为一谈。更常见的模式是在项目集合中设置一个“uid”字段,因此它同时具有一个“_id”和“uid”字段。比如这样:

      $item = $db->find(array('uid' => $userid));
      

      3) 在这种模式下,有时我发现我需要将 ObjectID 或 MongoID 转换为字符串,如下所示:

      $item = $db->findOne(array('uid' => (string)$userid));
      

      4) 但对于简单的 _id 搜索,这就是您所需要的:

      $item = $db->findOne(array('_id' => new MongoId($userid));
      

      希望这会有所帮助!

      【讨论】:

        【解决方案5】:

        结果 ($item) 中是否包含“_id”?

        echo $item['_id'];
        

        【讨论】:

          【解决方案6】:

          $item 是一个数组。所以打印$item如下..

          echo '<pre>';
          print_r($item);
          echo '</pre>';
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-09-21
            • 2015-10-12
            • 1970-01-01
            • 1970-01-01
            • 2021-11-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多