2013-01-21 63 views
1
db.users.aggregate(
    {$match : 
     {"_id" : ObjectId("50f69176904e1d66affec20d")} 
    }, 
    {$unwind : "$connections"}, 
    {$match : 
     {$or : [ 
      {"connections.users" : {$exists : false}}, 
      {"connections.users.id" : "50f651b8b58bba7fbec2f223"} 
     ]}}, 
    {$group : {_id : "$connections.group"}} 
) 

在這裏我找到特定用戶存在的組名。我在mongodb shell中得到了正確的結果。現在我必須在鋰電池中使用它。請幫助我執行命令。 對於館藏結構,看到這個鏈接:http://pastebin.com/P8uMw9cjmongodb查詢鋰命令

回答

0

你應該閱讀湯姆Maiaroto的文章"MongoDB Aggregation of all Shapes and Sizes"

它涵蓋的Map/Reduce,分組和新的聚合框架

+1

這不再可悲。基本思想是:Model :: connection() - > connection-> selectCollection('collectionName') - > aggregate(); 鋰沒有隱藏任何東西,你可以下載到核心的Mongo PHP擴展類。根據您想要製作的命令或查詢,只需從那裏引用php.net和Mongo文檔。 – Tom

+0

另外請注意,您可以通過以下方式獲取集合名稱:Model :: meta('source'),因此您無需手動輸入字符串以防更改,重新使用等。 – Tom

1

您可以像這樣運行任意命令:

$files = Files::connection()->connection->command(array("geoNear" => "fs.files", "near" => $coords, "maxDistance" => 1)); 

顯然你會使用Users :: connection(),但是在正在處理的聚合中也有一些改進,雖然不知道它們是否在主分支。

你也可以在這裏看到一個演示應用程序聚合:https://github.com/jmikola/li3-mongodb-aggregation-demo/blob/master/app/controllers/DemoController.php應該幫助你走。

+0

這是更好的回答上面的鏈接已被刪除。請注意,您可能需要使用selectCollection(),除非您想在整個數據庫上運行命令(這很好,您可以在命令選項的其他地方指定集合)。 – Tom