使用php-mongo查询mongodb

时间:2012-11-21 18:08:39

标签: php mongodb

我正在构建一个简单的消息系统,我在mongodb中有一个包含这样的文档的集合:

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

我想执行此查询:

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

获取此确切文档。此查询适用于mongo shell。

在php-mongo中,我试过这个:

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

但它不起作用。

我做错了什么?

4 个答案:

答案 0 :(得分:1)

你不想在这里进行In查询吗?

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

请参阅此处的查询: Mongo Advanced $in query

使您的PHP查询看起来像:

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

或者如果你试图找到它,那么你就不能做到:

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

答案 1 :(得分:1)

首先,当您保存数据时,您必须使用数组而不是字符串

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

这存储在一个元素"user1,user2,user3"

的数组之间

基本上,当您在shell中执行查询时,一切正常,因为您要求的数组包含一个元素。但是在php中你需要一个包含三个元素的数组。

因此,当您保存数据时,很可能就是您所需要的:

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

这将为您提供三个用户的数组。

然后阅读文档http://www.mongodb.org/display/DOCS/Advanced+Queries并根据您的需要调整您的查询:精确数组或仅数组中的某些元素

答案 2 :(得分:0)

你试过了吗?

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

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

答案 3 :(得分:0)

$in运算符类似于SQL IN修饰符,允许您指定可能匹配的数组。

请考虑以下使用$or运算符的示例。

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

References