使用php-mongo查询mongodb

I am building a simple messaging system, and i have a collection in mongodb with documents like this:

{ "_id" : ObjectId("50ad003f9811e5bc5c000000"), "between" : [ "user1,user2,user3" ] }

I want to perform this query:

db.conversations.find({'between': ["user1,user2,user3"]});

to get this exact document back. This query works in mongo shell.

in php-mongo, i tried this:

$collection->find(array("between"=>array("user1", "user2", "user3")));

but it does not work.

What am i doing wrong ?

Wouldn't you want to do an In query here?

db.collection.find( { "between" : { $in : ["user1", "user2", "user3"] } } );

See In query here: Mongo Advanced $in query

making your PHP query look like:

$collection->find(array("between"=>array("$in"=>array("user1", "user2", "user3"))));
//untested, should be something similar to this.

or if you're trying to find it exactly wouldn't you just be able to do:

$collection->find(array("between"=>array("user1,user2,user3")));

Have you tried:

$collection->find(array("between"=>"user1,user2,user3"));

or

$collection->find(array( "$elemMatch" => array( "between"=>"user1,user2,user3" ));

First of all when you are saving your data you have to use array not a string

{ "between" : [ "user1,user2,user3" ] }

this stores in "between" an array of one element "user1,user2,user3"

Basically when you do your query in shell everything is ok, because you are asking for a array with one element. But in php you are asking for an array of three elements.

So, when you save your data, most probably that is what you need :

{ "between" : [ "user1","user2","user3" ] } 

and this will give you an array of three users.

Then read the documentation http://www.mongodb.org/display/DOCS/Advanced+Queries to and adjust your query depends on what you need: either the exact array or only some elements in the array

The $in operator is analogous to the SQL IN modifier, allowing you to specify an array of possible matches.

Consider the following example which uses the $or operator.

$collection->find([
    'select' => ['$in' => ['option 1', 'option 2', 'option 3']]
]);

References