2016-06-10 5 views
0

는 좀 집계 마법을 완료 한 후 다음과 같은 데이터 집합을 가지고 :

{ "_id" : "5700edfe03fcdb000347bebb", "comment" : { "commentor" : "56f3f70d4de8c74a69d1d5e1", "id" : ObjectId("570175e6c002e46edb922aa1")}, "max" : ObjectId("570175e6c002e46edb922aa3")} 
{ "_id" : "5700edfe03fcdb000347bebb", "comment" : { "commentor" : "56f3f70d4de8c74a69d1d5e6", "id" : ObjectId("570175e6c002e46edb922aa2")}, "max" : ObjectId("570175e6c002e46edb922aa3")} 
{ "_id" : "5700edfe03fcdb000347bebb", "comment" : { "commentor" : "56f3f70d4de8c74a69d1d5e1", "id" : ObjectId("570175e6c002e46edb922aa3")}, "max" : ObjectId("570175e6c002e46edb922aa3")} 

_id는 게시물을 나타내고 게시물, 댓글이 있습니다. 이 경우 3 가지 의견이 있습니다. 2와 동일한 commentor ("56f3f70d4de8c74a69d1d5e1")와 다른 commentor ("56f3f70d4de8c74a69d1d5e6").

댓글 작성자 ("56f3f70d4de8c74a69d1d5e1") 만 모든 고유 댓글을 집계하는 집계 쿼리를 작성하고 게시자 "5700edfe03fcdb000347bebb"에 댓글 작성자가 두 번 댓글을 달았 음을 반환하고 싶습니다.

{ "$group" : { "_id" : "$_id", "count" : { "$sum" : "$comment.commentor" } } } 

결과가 있었다 :

{ "_id" : "5700edfe03fcdb000347bebb", "count" : 0 } 

내가 해당 게시물의 모든 commentors에 의해 모든 의견을 계산하는 것을 시도하고 있지 않다 있습니다

나는 다음과 같은 시도 그래서 나는 이것을하려고하지 않고있다 :

{ "$group" : { "_id" : "$_id", "count" : { "$sum" : 1 } } } 

sult 지역 :

{ "_id" : "5700edfe03fcdb000347bebb", "count" : 3 } 

난 그냥 사용자가 게시물의 수를 원하는 ("56f3f70d4de8c74a69d1d5e1")

편집 :

은 몇 가지 조사 후, 나는 $ 합계는 숫자 필드와하지에 작동하는지 참조 숫자가 아닌 필드 : https://docs.mongodb.com/manual/reference/operator/aggregation/sum/#grp._S_sum

게시물() 당 사용자 ("56f3f70d4de8c74a69d1d5e1")가 게시 한 댓글 수를 얻을 수있는 방법이 있습니까?

+0

그것은 모음 내에서 중복'_id' 필드를 가질 수 없습니다. 또한 당신은 당신의 결과가 어떻게 보일지 결코 말하지 않았습니다. ' – styvane

+0

어쩌면 내가 분명하게해야하지만 처음에는 데이터 집합이 실제로 집계 후에 _id가 중복 된 것처럼 보이는 이유입니다. – Simon

+0

초기 데이터를 표시 할 수 있습니까? 아마도 당신이 원하는 것을 할 수있는 더 좋은 방법이있을 것입니다. – styvane

답변

1

그래서 약간의 시행 착오 끝에 나는 그것을 알아낼 수 있었다.

group2 = { 
    "$group" : { 
     "_id" : "$_id", 
     "count" : { 
      "$sum" : {"$cond" : [ {"$eq" : ["$comms.c", "56f3f70d4de8c74a69d1d5e1"] }, 1 ,0 ] } 
     } 
    } 
} 

우리는 comms.c 사용자 "56f3f70d4de8c74a69d1d5e1"에 동일 조건으로 1의의를 합산된다.

결과 :

{ "_id" : "5700edfe03fcdb000347bebb", "count" : 2 } 
관련 문제