2014-03-29 62 views
1

我有一個集合超過10M的文檔。 我想獲得最大的_id形式蒙戈集合與PHPMongoDB _id超越9999999

$cursor = $collection->find(array())->sort(array('_id'=>-1))->limit(1); 
foreach ($cursor as $doc) 
{ 
    echo $doc['_id']; 
} 

我得到每次9999999的答案。

這也不起作用

$cursor = $collection->find(array('_id'=>array('$gte'=>'5000000')))->sort(array('_id'=>-1))->limit(1); 

我也試圖與總結

$query = array(
    array('$match'=>array('_id'=>array('$gte'=>'5000000'))), 
    array('$group'=>array('_id'=>'','max_id'=>array('$max'=>'$_id'))), 

); 
$res = $collection->aggregate($query); 
print_r($res); 

同9999999彈出,但這個時候它需要6-7秒來計算。

在我看來,有MongoDB中的限制,防止我做超越9999999

+0

您是否試過使用''gte'=> 5000000'而不是字符串? – WiredPrairie

+0

是得到了同樣的結果。 – DuppyWeb

+0

我認爲問題是它是一個字符串,我現在再次導入它,_id將是NumberInt() – DuppyWeb

回答

1

不要直接表現出來,但現在看來,你的_id值是數字字符串,而不是數字。字符串按字母順序排序,所以'9999999'(甚至'9')會在您降序排列的'10000000'之前出現。

您的最佳選擇可能是更新您的文檔以使用_id的數字數據類型,然後按照您的預期進行排序。

+0

是的,這是問題,我重新導入形式的MySQL與PHP的(INT),它現在工作。 – DuppyWeb