mongodb php findone () по ID - PullRequest
       2

mongodb php findone () по ID

4 голосов
/ 02 июля 2011

Этот код не найдет запись, основанную на поиске идентификатора

<?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

вывод доказывает, что мои переменные содержат идентификатор

Ответы [ 6 ]

7 голосов
/ 23 июля 2012

Мне просто нужно было сделать это, и я не думал, что другие ответы ответили на вопрос.

Проще говоря, для запроса по идентификатору Mongo (поле _id) используйте MongoId объекта, затем используйте функцию iterator_to_array , которая эффективно копирует итератор в массив, подходящий для итерации:

<code><?php

    $doc_id = "4f917f15168cbe6364000032";

    $cursor = $collection->find(
        array(
            '_id' => new MongoId($doc_id)
        )
    );

    $cursor2array = iterator_to_array($cursor);
    echo "<pre>"; print_r($cursor2array); echo "
"; foreach ($ cursor2array [$ doc_id] как $ key =>$ value) {echo "$ key => $ value";}?>
4 голосов
/ 07 декабря 2012

MongoDB нужна целочисленная переменная для создания правильного запроса.

В моем проекте это работает так:

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

Надеюсь, это кому-нибудь поможет!

2 голосов
/ 15 марта 2012

Этот пост несколько устарел, но на тот случай, если кто-нибудь исследует эту проблему, вот пара моментов, на которые следует обратить внимание:

1) $ item - это массив, поэтому код, вероятно, должен читать что-то вроде этого:

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

2) Кроме того, идентификаторы пользователя и 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));

надеюсь, это поможет!

2 голосов
/ 02 июля 2011

$item - это массив.поэтому напечатайте $item, как показано ниже ..

<code>echo '<pre>';
print_r($item);
echo '
';
1 голос
/ 28 января 2019

Если вы используете официальный драйвер , то вам следует использовать

$item = $db->findOne(array('_id' => new MongoDB\BSON\ObjectId($userid));
0 голосов
/ 06 февраля 2012

Есть ли в результате ($ item) "_id"?

echo $item['_id'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...