1

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

我试过:

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

2 回答 2

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(事实上,当前代码是实现这一点的良好起点)。

于 2012-11-09T16:50:21.537 回答
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
)
于 2012-11-10T02:21:42.613 回答