Как написать запрос поиска в mongo db для выбора определенных значений. Например
IN MYSQL - SELECT * from things where id=3; IN Mongo - thingscollection->find(array("_id" => $id))
предположим, что если запрос MYSQL выглядит так,
SELECT name,age from things where id=3;
Мне интересно, как написать запрос на поиск в PHP / MongoDB, чтобы выбрать определенные значения?
MySQL: SELECT name,age from things where id=3; Mongo: $db->things->find(array("id" => 3), array("name" => 1, "age" => 1));
Вы можете использовать mongo _id вместо собственного созданного поля id
.
Для получения дополнительной информации о драйвере php: http://php.net/manual/en/mongo.sqltomongo.php Другая хорошая ссылка только для SQL to Mongo – http://rickosborne.org/download/SQL-to- MongoDB.pdf
используйте SQL для Mongo в качестве ссылки при написании запросов в Mongo Statement.
Вы можете найти диаграмму привязки SQL к Mongo из справочной системы PHP онлайн.
Йогеш предложил using the mongo _id
но это на самом деле сложнее обычного поля в документе.
Достигать:
IN MYSQL - SELECT * from things where id=3;
используя PHP-драйвер MongoDB, сделайте следующее:
$m = new MongoClient(); $db = $m->selectDB('stuff'); $collection = new MongoCollection($db, 'things'); $collection->find(array('_id', new MongoID('3'));
Если вы не сохранили документ с полем «_id», то Mongo автоматически добавляет это поле со значением BSON, которое имеет очень высокую вероятность быть уникальным. Обычно это что-то вроде «512ba941e0b975fe00000000».
Если вы попытаетесь $collection->find(array('_id' => '512ba941e0b975fe00000000'));
результаты пустые и никаких ошибок не возникает, что может быть очень неприятно при отладке. Легко забыть использовать new MongoID()
а не просто строку _id
.
$mongo_url = 'mongodb://127.0.0.1/'; $client = new \MongoDB\Client($mongo_url); $db_name = 'your_db_name'; $db = $client->$db_name; $collection = $db->your_collection_name; $where = array( 'user_id' => 3 ); $select_fields = array( 'name' => 1, 'age' => 1, ); $options = array( 'projection' => $select_fields ); $cursor = $collection->find($where, $options); //This is the main line $docs = $cursor->toArray(); print_r($docs);