2017-02-13 3 views
0

타임 스탬프로 문서를 정렬하고 고유 한 하위 이름을 가져 오려고합니다. 따라서 쿼리의 예상은 다음과 같습니다.

[alex, elizabeth, felix, tom, sonny, ashton, sharon] 

컬렉션은;

{ "timestamp" : 1486641003000, children: [{name: "sharon"}] }, 
{ "timestamp" : 1486645481504, children: [{name: "tom"} , {name: "alex"}]}, 
{ "timestamp" : 1486732863102, children: [{name: "alex"}, {name: "elizabeth"}] }, 
{ "timestamp" : 1486642403974, children: [{name: "sonny"}] }, 
{ "timestamp" : 1486641003000, children: [{name: "elizabeth"}] }, 
{ "timestamp" : 1486645481504, children: [{name: "felix"}] }, 
{ "timestamp" : 1486645481504, children: [{name: "tom"} , {name: "alex"}]}, 
{ "timestamp" : 1486642623178, children: [{name: "alex"}] }, 
{ "timestamp" : 1486642403974, children: [{name: "felix"}] }, 
{ "timestamp" : 1486641003000, children: [{name: "ashton"}] }, 

지금까지 내가 무엇을 했습니까?

db.collection.aggregate([ 
    {$unwind: "$children"}, 
    {$sort: {"timestamp" : -1}}, 
    {$group: {"_id" : "" , children: {$addToSet: "$children.name"}}} 
]) 

하지만 그룹화는 타임 스탬프에 따라 정렬을 덮어 씁니다. 결과는 내가 예상했던 것과 같지 않기 때문에;

{ "_id" : "", "children" : [ "ashton", "felix", "tom", "sonny", "elizabeth", "sharon", "alex" ] } 

그렇다면 어떻게 별개의 하위 이름을 타임 스탬프별로 정렬하면서 가져올 수 있습니까?

답변

1

그래서이 경우 한 번 더 분류하고 그룹화해야합니다.

db.collection.aggregate([ 
    {$unwind: "$children"}, 
    {$sort: { "timestamp": -1 }}, 
    {$group: {"_id": "$children.name", "timestamp": {$first: "$timestamp"}}}, 
    {$sort: { "timestamp": -1 }}, 
    {$group: {"_id": null, "children": {$push: "$_id"}}} 
]) 

결과는 다음과 같이 표시됩니다

{ "_id" : null, "children" : [ "alex", "elizabeth", "tom", "felix", "sonny", "sharon", "ashton" ] } 

"톰"와 "펠릭스는"모두 타임 스탬프를 가지고 있기 때문에 그것의, "샤론"과 "애쉬튼"와 같은.