2011-08-23 59 views
1

可以對mongo數據庫中的子數組中的數據進行排序嗎?在mongodb中對子數組中的數據進行排序

{ "_id" : ObjectId("4e3f8c7de7c7914b87d2e0eb"), 
    "list" : [ 
      { 
       "id" : ObjectId("4e3f8d0be62883f70c00031c"), 
       "datetime" : 1312787723, 
       "comments" : 
        { 
         "id" : ObjectId("4e3f8d0be62883f70c00031d") 
         "datetime": 1312787723, 
        }, 
        { 
         "id" : ObjectId("4e3f8d0be62883f70c00031d") 
         "datetime": 1312787724, 
        },     
        { 
         "id" : ObjectId("4e3f8d0be62883f70c00031d") 
         "datetime": 1312787725, 
        }, 
      } 
     ], 
    "user_id" : "3" } 

例如,我想按字段「datetime」排序評論。謝謝。或者只是選擇所有數據並將其排序在PHP代碼中,但是我的查詢在mongo的限制下工作...

回答

2

使用MongoDB,您可以對文檔進行排序或僅選擇文檔的某些部分,但可以不會修改搜索查詢返回的文檔。

如果您的評論的當前順序可以更改,那麼最好的解決方案是在MongoDB文檔(find(),然後對每個文檔,對其評論和update())進行排序。如果您想保留當前的評論內部順序,則必須在每個查詢後對每個文檔進行排序。

在這兩種情況下,排序都將使用PHP完成。例如:

foreach ($doc['list'] as $list) { 
    // uses a lambda function, PHP 5.3 required 
    usort($list['comments'], function($a,$b){ return $a["datetime"] < $b["datetime"] ? -1 : 1; }); 
} 

如果您不能使用PHP 5.3,請將lambda函數替換爲普通函數。請參閱usort() examples

+0

thx,我已經這樣做了,但我認爲可以用mongo來做,但Thx用於回覆;) –

+1

如果您有解決方案,將它與我們其他人分享會很高興。 –