2011-04-29 64 views
2

我想用MongoDb做的事情是將我的集合'tweets'排序在一個整數字段'points'上,但是我想從點數中移除秒數,現在的時間和推文創建的時間之間的差異。所以按(點 - 時間差)排序。MongoDb排序依據被計算的值

它依賴於運行查詢的時間。較早的推文最終會得到較低的分數。

有人可以告訴我一個在MongoDb(在PHP中)的例子嗎?

回答

1

AFAIK,sort()不需要function,所以你可以做的不多。您可能需要考慮按照應用層中的時差進行排序。

2

MongoDB在sort()命令中沒有function

實際上,執行一個簡單的查找對象,其中object.a > object.b需要使用未索引的$where clause

現在解決這個問題的方法是實際計算該字段然後對其進行排序。

所以在你的情況下,你會有一個新的領域的價值(點 - 時間)。請注意,如果您打算對這些數據進行排序,您可能希望將該字段編入索引。嘗試對大量未索引的字段進行排序可能會非常緩慢。

0
$m = new Mongo(); // connect 
$collection = 'collection_name'; 
$db = $m->selectDB('mongodb_name'); 
$cursor = $db->$collection->find(); 
$cursor->sort(array('day' => -1)); 
$items = iterator_to_array($cursor);