2012-04-09 57 views
0

集「問題」這樣的
如何自定義級別這樣MongoDB中通過PHP

{ 
    _id: 
    question: 
    time: 
    click_nums: 
    answers: [ 
     {}, 
     {}, 
     ... 
    ] 
} 

現在我想排名像這樣的問題,也得到了前5名:

rank_condition = (now_time - time)/24*(click_nums*0.2+nums_of_answers*0.8) 

我怎麼能意識到這一點,我是一個較新的Mongodb ..

空間:用PHP實現它!

+0

我想說你必須在你的應用程序中這樣做。也許新的聚合框架可以做到,但可能不會更有效。你使用的是什麼版本的MongoDB? – Thilo 2012-04-09 09:01:33

+0

2.0.4我必須這樣做。因爲我有大量的50,000個問題 – tinybai 2012-04-09 09:07:56

回答

2

MongoDB可以(當前)僅對字段的值進行排序。它不支持複雜的表達式(如在SQL的ORDER BY中)。新的聚合框架的確可以在這裏得到一些幫助。

你有三個選擇:

  1. 排名中的應用。這是最容易實現的。

  2. 預先計算排名位置(運行計算和更新排名的定期後臺作業)。這是查詢最有效的方法(您可能會得到稍微陳舊的數據)。

  3. 使用Aggregation Framework(可在2.2和當前不穩定)。這是「最酷」的方法。 (你可以玩新的玩具:))

+1

只有50.000個文檔,我可能會(1)結合緩存結果某處(可能在另一個集合中)爲一段時間。 – Thilo 2012-04-09 09:09:52