2012-09-20 16 views
5

Wie schreibe Suche Abfrage in Mongo db um bestimmte Werte zu wählen. Zum BeispielMongoDB/PHP .. Wie schreibe ich Select-Abfragen?

IN MYSQL - SELECT * from things where id=3; 
IN Mongo - thingscollection->find(array("_id" => $id)) 

nehme an, wenn die MYSQL-Abfrage wie folgt aussieht,

SELECT name,age from things where id=3; 

Ich frage mich, wie finden Abfrage in PHP/MongoDB schreiben bestimmte Werte wählen?

+0

http://coderwall.com/p/aymsvw –

Antwort

1

Verwenden Sie SQL to Mongo als eine Referenz beim Schreiben von Abfragen in Mongo-Anweisungen.

0

Yogesh vorgeschlagen using the mongo _id, aber das ist eigentlich komplizierter als ein normales Feld im Dokument.

zu erreichen:

IN MYSQL - SELECT * from things where id=3; 

MongoDB PHP-Treiber verwenden, dies zu tun:

$m = new MongoClient(); 
$db = $m->selectDB('stuff'); 
$collection = new MongoCollection($db, 'things'); 
$collection->find(array('_id', new MongoID('3')); 

Wenn Sie nicht das Dokument mit einem "_id" Feld speichern, fügt Mongo dieses Feld automatisch mit einem BSON-Wert, der sehr wahrscheinlich einzigartig ist. Es ist normalerweise so etwas wie '512ba941e0b975fe00000000'.

Wenn Sie versuchen, $collection->find(array('_id' => '512ba941e0b975fe00000000')); die Ergebnisse sind leer und kein Fehler wird generiert, die beim Debuggen extrem frustrierend sein kann. Es ist leicht zu vergessen, new MongoID() und nicht einfach die Zeichenfolge _id zu verwenden.

+0

Nein, können Sie auch 'verwenden $ Kollektion-> finden (array ('_ id' => '512ba941e0b975fe00000000'));'. und es gibt kein Problem. –

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