Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php mongo查询mongodb_Php_Mongodb - Fatal编程技术网

使用php mongo查询mongodb

使用php mongo查询mongodb,php,mongodb,Php,Mongodb,我正在构建一个简单的消息传递系统,我在mongodb中收集了如下文档: { "_id" : ObjectId("50ad003f9811e5bc5c000000"), "between" : [ "user1,user2,user3" ] } 我要执行此查询: db.conversations.find({'between': ["user1,user2,user3"]}); 要取回这份文件。此查询在mongo shell中工作 在php mongo中,我尝试了以下方法: $collecti

我正在构建一个简单的消息传递系统,我在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")));
但它不起作用


我做错了什么?

您不想在这里进行查询吗

db.collection.find( { "between" : { $in : ["user1", "user2", "user3"] } } );
请参见此处的查询:

使您的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")));
您是否尝试过:

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


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

{ "between" : [ "user1,user2,user3" ] }
它存储在一个元素的数组“between”中
“user1、user2、user3”

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

因此,当您保存数据时,最有可能的是您需要的:

{ "between" : [ "user1","user2","user3" ] } 
这将为您提供一个包含三个用户的数组


然后阅读文档并根据需要调整查询:精确数组或仅数组中的某些元素中的
$in
运算符类似于SQL
in
修饰符,允许您指定可能匹配的数组

考虑以下使用
$或
运算符的示例

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

无错误,它只返回一个空的结果no,因为in运算符匹配包含数组中任何元素的文档。我也不能使用$all操作符,因为我不想匹配一个包含所有3个用户和另一个用户的文档。因此,您只想匹配正好包含1,2和3个用户的文档?@QuArK:$collection->find(array(“between”=>array(“user1,user2,user3”);在php中不起作用?这似乎模拟了您在Mongo中使用的确切查询。。(注意用户的1,2,3之间缺少“分隔
$collection->find([
    'select' => ['$in' => ['option 1', 'option 2', 'option 3']]
]);