2016-12-24 68 views
0

內嵌套對象我有一個集合結構如下彙總每個文檔

{ 
    "_id" : "000aaa111", 
    "reviewer_id" : "KQ5E8vKN5ezzgwH3C", 
    "reviewee_id" : "FodX5fCg3RBe92Dpu", 
    "stars" : [ 
     { 
      "val" : "4.5", 
      "for" : "communication" 
     }, 
     { 
      "val" : "4", 
      "for" : "cleanliness" 
     } 
    ] 
} 

這實際上是對評級的項目在我的遊客將給予他們星(1〜5)。那麼,我該如何彙總我收集的所有文件,以總結所有收到的明星。這是輸出,我希望

{ 
    "reviewee_id": "FodX5fCg3RBe92Dpu", 
    "overall": "5", 
    "communication": "3", 
    "cleanliness": "3.5" 
} 

MongoDB是還是相當新的給我,我無法找到我現在所擁有的結構相匹配的任何實例。

你認爲我的好去嗎?

+0

你介意增加的預期輸出的帖子? – Veeram

+0

哦,是的。我已經更新了我的問題 – Muhaimin

回答

0

根據預期輸出,您需要調整結構以充分利用聚合。

您的結構應該看起來像。

輸入:

{ 
    "_id": ObjectId("585dc520772c68234445f2a4"), 
    "reviewer_id": "KQ5E8vKN5ezzgwH3C", 
    "reviewee_id": "FodX5fCg3RBe92Dpu", 
    "stars": [{ 
     "communication": 4.5 
    }, { 
     "cleanliness": 4 
    }, { 
     "overall": 3 
    }] 
} { 
    "_id": ObjectId("585dc520772c68234445f2a2"), 
    "reviewer_id": "KQ5E8vKN5ezzgwH3D", 
    "reviewee_id": "FodX5fCg3RBe92Dpu", 
    "stars": [{ 
     "communication": 2.5 
    }, { 
     "cleanliness": 3 
    }, { 
     "overall": 4 
    }] 
} 

查詢:

aggregate(
    [{ 
     $unwind: "$stars" 
    }, { 
     $group: { 
      _id: "$reviewee_id", 
      communication: { 
       $avg: "$stars.communication" 
      }, 
      cleanliness: { 
       $avg: "$stars.cleanliness" 
      }, 
      overall: { 
       $avg: "$stars.overall" 
      } 
     } 
    }] 
) 

輸出

{ "_id" : "FodX5fCg3RBe92Dpu", "communication" : 3.5, "cleanliness" : 3.5, "overall" : 3.5 } 
+0

以上使用流星,我不能直接申請與流星聚合。現在我正在看'流星添加meteorhacks:聚合' – Muhaimin