2015-01-16 3 views
-1

나는 Year, Author 및 _id가있는 Mongo 테이블을 보유하고 있습니다. 필자가해야 할 일은 특정 연도 (2006 년 말)를 필터링하고 작성자를 기준으로 그룹을 수행하고 모든 저자에게 고유 한 _id 목록을 제공하는 것입니다. 작성자는 배열입니다.MongoDB - 다른 열의 그룹화 후 열의 고유 값 가져 오기

내 테이블의 스냅 샷은

{ 
    "_id": ObjectId("54898fbb306ba2153c3e637b"), 
    "Author": [ 
    "Hullman, J.", 
    "Drucker, S.", 
    "Riche, N.H.", 
    "Bongshin Lee", 
    "Fisher, D.", 
    "Adar, E." 
    ], 
    "Year": "2013" 
}{ 
    "_id": ObjectId("54898fbb306ba2153c3e637c"), 
    "Author": [ 
    "Schulz, H.", 
    "Nocke, T.", 
    "Heitzler, M.", 
    "Schumann, H." 
    ], 
    "Year": "2013", 
}{ 
    "_id": ObjectId("54898fbc306ba2153c3e6b58"), 
    "Author": [ 
    "Boissonnat, J.-D.", 
    "Geiger, B." 
    ], 
    "Year": "1993", 
} 

이제 다음과 같습니다까지 내가 가진 쿼리를 다음과 같이한다. [: { "저자 이름": ID의 [목록]} {ID의 [목록] "저자 이름"}]

+0

문서를 표시하십시오. "작성자"배열에 어떤 내용이 있습니다. 내 돈은 당신이 실제로 Mongoose를 사용하고 있으며 이것은 문서 참조의 배열입니다. –

+0

해결책을 찾을 수있었습니다. 내 대답은 아래 게시 참조하십시오. 감사! –

+0

그러면 아마도 귀하의 대답이 유효하다는 것을 설명하기위한 몇 가지 데이터를 보여 주어야 할 것입니다. 사람들은 게시 한 내용으로이를 판별 할 수 없습니다. 이 질문과 대답 사이트입니다. 귀하의 질문에 답을 정당화하기에 충분한 내용이 없습니다. –

답변

1

난 그냥했다

db.list_input_file.aggregate([ 
    {'$match':{'Year':{$eq:'2006'}}}, 
    {'$unwind':'$Author'}, 
    {'$group':{'_id':'$Author', 'count': { '$sum': 1 }}} 
]) 

내가 필요로하는 모든

는 형식의 출력 $addToSet accumalator 연산자를 사용하여 ID를 가져옵니다. 마지막 쿼리는 다음과 같습니다.

db.list_input_file.aggregate([ 
{'$match':{'Year':{$eq:'2006'}}}, 
{'$unwind':'$Author'}, 
{'$group':{'_id':'$Author', 'count': { '$sum': 1 }, 'ids':{$addToSet:'$_id'}}} 
]) 

위의 쿼리 출력 결과는 다음과 같습니다.

{ "_id" : "Hofacker, I.L.", "ids" : [ ObjectId("54898fbb306ba2153c3e66e4") ] } 
{ "_id" : "Flamm, C.", "ids" : [ ObjectId("54898fbb306ba2153c3e66e4") ] } 
{ "_id" : "Heine, C.", "ids" : [ ObjectId("54898fbb306ba2153c3e66e4") ] } 
{ "_id" : "MacEachren, A.M.", "ids" : [ ObjectId("54898fbb306ba2153c3e66dd") ] } 
{ "_id" : "Card, S.K.", "ids" : [ ObjectId("54898fbb306ba2153c3e66d4"), ObjectId("54898fbb306ba2153c3e66ca") ] } 
관련 문제