Reputation: 3969
I have a list of street names and I want to select all that start with "Al". In my MySQL I would do something like
SELECT * FROM streets WHERE "street_name" LIKE "Al%"
How about MongoDB using PHP?
Upvotes: 7
Views: 42827
Reputation: 1342
You can also do something like this
['key' => ['$regex' => '(?i)value']]
Upvotes: 0
Reputation: 139
here is my working example:
<?php
use MongoDB\BSON\Regex;
$collection = $yourMongoClient->yourDatabase->yourCollection;
$regex = new Regex($text, 's');
$where = ['your_field_for_search' => $regex];
$cursor = $collection->find($where);
//Lets iterate through collection
Upvotes: 2
Reputation: 11
<?php
$mongoObj = new MongoClient();
$where = array("name" => new MongoRegex("^/AI/i"));
$mongoObj->dbName->collectionName->find($where);
?>
Upvotes: 0
Reputation: 2602
MongoRegex has been deprecated.
Use MongoDB\BSON\Regex
$regex = new MongoDB\BSON\Regex ( '^A1');
$cursor = $collection->find(array('street_name' => $regex));
//iterate through the cursor
Upvotes: 1
Reputation: 746
$collection.find({"name": /.*Al.*/})
or, similar,
$collection.find({"name": /Al/})
You're looking for something that contains "Al" somewhere (SQL's '%' operator is equivalent to regexps' '.*'), not something that has "Al" anchored to the beginning of the string.
Upvotes: 1
Reputation: 15159
See: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
Also, highly recommend just using the native mongodb connector from PHP instead of a wrapper. It's way faster than any wrapper.
Upvotes: 3
Reputation: 179994
Use a regular expression:
db.streets.find( { street_name : /^Al/i } );
or:
db.streets.find( { street_name : { $regex : '^Al', $options: 'i' } } );
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions
Turning this into PHP:
$regex = new MongoRegex("/^Al/i");
$collection->find(array('street_name' => $regex));
Upvotes: 17