簡體   English   中英

mongodb php findone() by ID

[英]mongodb php findone() by ID

此代碼不會根據 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 由 another.php 文件中的表單提供

這是 output....

$item: Array

 $userid: 4e0dfc8e7bfb8bac12000000

 $theObjId: 4e0dfc8e7bfb8bac12000000

output 證明我的變量包含 ID

我只需要這樣做,並且認為其他答案沒有回答這個問題。

簡單來說,通過 Mongo ID( _id字段)查詢,使用MongoId object,然后使用iterator_to_array function,它有效地將迭代器復制到適合迭代的數組中:

<?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/>";
    }

?>

MongoDB 需要 integer 變量來創建正確的查詢。

在我的項目中,它是這樣工作的:

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

希望這對某人有幫助!

$item是一個數組。 所以打印$item如下..

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

這篇文章有點陳舊,但如果有人正在研究這個問題,這里有幾個需要考慮的事項:

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));

希望這可以幫助!

如果您使用的是官方驅動程序,那么您應該使用它

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

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

echo $item['_id'];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM