我想用MongoDb做的事情是將我的集合'tweets'排序在一個整數字段'points'上,但是我想從點數中移除秒數,現在的時間和推文創建的時間之間的差異。所以按(點 - 時間差)排序。MongoDb排序依據被計算的值
它依賴於運行查詢的時間。較早的推文最終會得到較低的分數。
有人可以告訴我一個在MongoDb(在PHP中)的例子嗎?
我想用MongoDb做的事情是將我的集合'tweets'排序在一個整數字段'points'上,但是我想從點數中移除秒數,現在的時間和推文創建的時間之間的差異。所以按(點 - 時間差)排序。MongoDb排序依據被計算的值
它依賴於運行查詢的時間。較早的推文最終會得到較低的分數。
有人可以告訴我一個在MongoDb(在PHP中)的例子嗎?
AFAIK,sort()
不需要function
,所以你可以做的不多。您可能需要考慮按照應用層中的時差進行排序。
MongoDB在sort()
命令中沒有function
。
實際上,執行一個簡單的查找對象,其中object.a > object.b
需要使用未索引的$where clause。
現在解決這個問題的方法是實際計算該字段然後對其進行排序。
所以在你的情況下,你會有一個新的領域的價值(點 - 時間)。請注意,如果您打算對這些數據進行排序,您可能希望將該字段編入索引。嘗試對大量未索引的字段進行排序可能會非常緩慢。
$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);
此信息可能對您有所幫助。
MongoDB get all fields + sort by value computed from multiple fields
的基本想法是,它創建了從舊的對象計算出的新屬性的新對象。然後對新對象進行排序並返回結果。