使用Lili从MongoDB获取不同的记录

使用Lili从MongoDB获取不同的记录,mongodb,find,distinct,lithium,Mongodb,Find,Distinct,Lithium,我想从收集的“页面”中找到不同的记录 我试过: $Volume_numbers = Pages::find(array('fields'=>'DISTINCT volume_number')); 我还尝试: $params = array('conditions'=>array( 'distinct' => 'pages', 'key' => 'volume_number', )); $pageV

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

我试过:

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

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

// Where $mongodb is an instance of lithium\data\source\MongoDb
$result = $mongodb->connection->command(array(
    'distinct' => 'pages',
    'key' => 'volume_number',
));

或者,我相信Nate Abele会欢迎向Limition发出请求,向
read()
方法添加对
distinct
的支持,就像它对
组的支持一样(事实上,当前的代码是实现这一点的良好起点).

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

// Where $mongodb is an instance of lithium\data\source\MongoDb
$result = $mongodb->connection->command(array(
    'distinct' => 'pages',
    'key' => 'volume_number',
));

或者,我相信Nate Abele会欢迎Limition的pull请求,向
read()
方法添加对
distinct
的支持,就像它对
组的支持一样(事实上,当前的代码是实现这一点的良好起点)。

这段代码对我来说很有用

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

这个代码对我有用

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

我添加了:使用Lili\data\source\MongoDb;和$result=$mongodb->connection->command(数组('distinct'=>'pages','key'=>'volume\u number',);遵守守则。。没有结果。如果没有结果,则
$mongodb
不是应用程序中用于页面模型的相同数据库资源。根据您上面的评论,它看起来像是
Pages::connection()
返回了您需要的参考;和$result=$mongodb->connection->command(数组('distinct'=>'pages','key'=>'volume\u number',);遵守守则。。没有结果。如果没有结果,则
$mongodb
不是应用程序中用于页面模型的相同数据库资源。根据您上面的评论,它看起来像是
Pages::connection()
返回了您需要的引用。这段代码对我有用<代码>$pageVolumes=Pages::connection()->connection->command(数组('distinct'=>'页面','key'=>'卷号',);
Results:
Array([values]=>Array([0]=>22[1]=>38)[stats]=>Array([n]=>1084[nscanned]=>1084[nscannedObjects]=>1084[timems]=>3[cursor]=>BasicCursor)[ok]=>1)
这个代码对我有用<代码>$pageVolumes=Pages::connection()->connection->command(数组('distinct'=>'页面','key'=>'卷号',);
Results:
Array([values]=>Array([0]=>22[1]=>38)[stats]=>Array([n]=>1084[nscanned]=>1084[nscannedObjects]=>1084[times]=>3[cursor]=>basiccursors)[ok]=>1]