使用锂获取MongoDB的独特记录

时间:2012-11-09 15:24:58

标签: mongodb find distinct lithium

我想从收集的“页面”中找到不同的记录。

我试过了:

$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
}

2 个答案:

答案 0 :(得分:1)

我不相信lithium\data\source\MongoDb命令在distinct中有一个包装器方法;但是,MongoDb类确实组成了PHP驱动程序的MongoMongoDB类,因此您可以执行以下操作:

// 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
)