我想从收集的“页面”中找到不同的记录。
我试过了:
$Volume_numbers = Pages::find(array('fields'=>'DISTINCT volume_number'));
我也尝试过:
$params = array('conditions'=>array(
'distinct' => 'pages',
'key' => 'volume_number',
));
$pageVolumes = Pages::all($params);
正如MongoDB文档中所建议的那样以及其中一个答案。
当我尝试通过Mongo执行此操作时,我得到了正确的结果
> db.runCommand({distinct:'pages',key:'volume_number'})
{
"values" : [
22,
38
],
"stats" : {
"n" : 1084,
"nscanned" : 1084,
"nscannedObjects" : 1084,
"timems" : 25,
"cursor" : "BasicCursor"
},
"ok" : 1
}
答案 0 :(得分:1)
我不相信lithium\data\source\MongoDb
命令在distinct
中有一个包装器方法;但是,MongoDb类确实组成了PHP驱动程序的Mongo和MongoDB类,因此您可以执行以下操作:
// Where $mongodb is an instance of lithium\data\source\MongoDb
$result = $mongodb->connection->command(array(
'distinct' => 'pages',
'key' => 'volume_number',
));
或者,我确信Nate Abele欢迎向Lithium提出拉取请求,以便为distinct
方法添加对read()
的支持,就像它已经为group
一样(事实上) ,当前的代码是实现这个的一个很好的起点。)
答案 1 :(得分:0)
这段代码对我有用!
$pageVolumes = Pages::connection()->connection->command(array(
'distinct' => 'pages',
'key' => 'volume_number',
));
结果:
Array
(
[values] => Array
(
[0] => 22
[1] => 38
)
[stats] => Array
(
[n] => 1084
[nscanned] => 1084
[nscannedObjects] => 1084
[timems] => 3
[cursor] => BasicCursor
)
[ok] => 1
)