2012-06-11 66 views
0

從PHP Mongo驅動程序發出簡單查詢時遇到一些麻煩。 這是殼查詢:使用PHP驅動程序的Mongo獨特排序查詢

db.testing.distinct('summary.type').sort(); 

根據該文件,我可以做一個db->command使用不同的查詢。這裏是我已經試過:

$all_types = $db->command(
     array(
      "distinct"  => "summary.type", 
      "key"   => "summary.type" 
    ) 
); 

var_dump($all_types); 

但是,而不是找回我所期望的數據,我只得到與像statsnscannednscannedObjects 指標我在做什麼錯光標?

感謝, NS

回答

1

命令不返回MongoCursor對象,但始終只是一個文檔。就像findOne()一樣。在這個返回的文檔,則返回數組中的values數組元素包含所有結果的數組:

<?php 
$m = new Mongo; $c = $m->demo->pubs; $c->drop(); 

$c->insert(array('name' => 'Betsy Smith', 'city' => 'London')); 
$c->insert(array('name' => 'London Tavern', 'city' => 'London')); 
$c->insert(array('name' => 'Lammars',  'city' => 'Manchester')); 
$c->insert(array('name' => 'Weatherspoons', 'city' => 'Coventry')); 

$r = $m->demo->command(array(
    'distinct' => 'pubs', 
    'key' => 'city', 
    'query' => array('name' => array('$ne' => 'Weatherspoons')) 
)); 
var_dump($r['values']); 
?> 

將返回:

array(2) { 
    [0] => 
    string(6) "London" 
    [1] => 
    string(10) "Manchester" 
} 
1

你正在尋找的結果實際上是在values命令響應的關鍵。如果您查看var_dump()的整個輸出,您會看到values,stats(您提到的)和ok的密鑰。

在JavaScript控制檯,集合的distinct()輔助函數實際上爲您處理展開,你可以看到查看源代碼時:

> db.testing.distinct 
function (keyString, query) { 
    var res = this._distinct(keyString, query); 
    if (!res.ok) { 
     throw "distinct failed: " + tojson(res); 
    } 
    return res.values; 
} 

而且,我相信你有正在發行的命令是錯誤的通過PHP驅動程序。 distinct選項應該引用集合名稱,而key應該引用該字段名稱。有關更多信息,請參閱Distinct docs

相關問題