我正在构建一个简单的消息系统,我在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")));
但它不起作用。
我做错了什么?
答案 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']]
]);