0

我正在构建一个简单的消息传递系统,并且我在 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

4 回答 4

1

你不想在这里做一个 In 查询吗?

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

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

使您的 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")));
于 2012-11-21T18:27:40.790 回答
1

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

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

这存储在一个元素的数组“之间”"user1,user2,user3"

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

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

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

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

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

于 2012-11-22T02:36:10.550 回答
0

你有没有尝试过:

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

或者

$collection->find(array( "$elemMatch" => array( "between"=>"user1,user2,user3" ));
于 2012-11-21T20:07:27.673 回答
0

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

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

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

参考

于 2012-12-13T04:23:11.703 回答