2013-07-07 60 views
0

這樣的操作可能嗎?如何查詢MongoDB PHP codeigniter中的group by和distinct?

樣本記錄:

{ 
_id: ObjectId("51d6be147483c58419000002"), 
user: "ashok", 
action: "login", 
time: 1373027860, 
details: { 
       user_entries: "blah..blah", 
       url: "web.domain.com" 
       } 
} 

假設,我想通過URL訪問組,爲每個用戶, 組通過網址,讓用戶= 「阿肖克」,限制10

我使用AlexBilbie MongoDB-Codeigniter庫(它不具有聚合)。所以使用普通的PHP。
即使我可以聚合,如何區分或限制它?
任何建議是值得歡迎的。

+0

我是littlebit不確定你想要的最終結果文件看起來像..你可以張貼的就應該什麼樣子的例子嗎?我假設每個用戶可能多次訪問過相同的網址..你想統計他訪問過每個網址的次數嗎? – bjori

+0

假設用戶「ashok」&「bob」分別訪問welcome.html頁面10次和20次,我想要得到一個結果,例如,ashok:10和bob:20按照用戶訪問的url分組。想限制結果,但現在沒問題) –

回答

2

首先使用group_by和distinct在一起沒有任何意義。無論您是使用group_by還是distinct。

如果你想爲分組查詢做某種分頁,你必須使用map和reduce或聚合管道。在你的情況下,聚合看起來就像那樣。

db.users.aggregate(
    { '$match' => { 'user' => 'ashok' } }, 
    { '$group' => { '_id' => '$details.url' } }, 
    { '$skip' => 0 }, 
    { '$limit' => 10 } 
) 

我正在使用此聚合功能來顯示references at VersionEye。聚合功能允許在數據庫級別進行分組和分頁,這就是爲什麼它比其他ORM或分頁解決方案快得多。

+0

謝謝但是,假設我有2個用戶,A&B.A訪問1.html兩次,2.html五次; B訪問1.html三次,2.html六次。這會工作嗎?像A看到1.html 2次...等結果? –

+0

否。聚合管道不計算這樣的值。在你的情況下,你必須使用地圖和減少。 –

+0

好,謝謝:) –

0

在下面的格式,你可以給一個限制:

$this->mongo_db->order_by(array('Student_Name'=>'asc'))->limit(20)->get('mycollection_name');