2017-02-18 1 views
0

얻기 일치 몽구스 컬렉션

var StoreSchema = new Schema({ 
name: String, 
category: [String], 
subCategory: [String], 
}); 

샘플 데이터는 다음과 같습니다 것처럼 보이는 컬렉션이 :

[ 
{ 
'name':'Store1', 
'category':['Cat1','Cat2','Cat3'], 
'subCategory':['SubCat1','SubCat2'] 
}, 
{ 
'name':'Store2', 
'category':['Cat2','Cat3','Cat4'], 
'subCategory':['SubCat1','SubCat2'] 
}, 
{ 
'name':'Store3', 
'category':['Cat4','Cat3','Cat1'], 
'subCategory':['SubCat1','SubCat2'] 
} 
] 

내가 그들의 범주별로 그룹화 상점을 얻고 싶은 I 상점 이름과 ID도 검색하려고합니다.

Store.aggregate([ 
     {$unwind: '$category'}, 
     {$group: { _id: '$category', count: {$sum: 1}}}, 
     {$project: {'_id':1, category: '$_id',count: '$count'}} 
     ]); 

내가 얻을 출력은 다음과 같이이다 :

[ 
{ 
    "count": 2, 
    "Category": "cat1" 
}, 
{ 
    "count": 2, 
    "category": "cat2" 
} 
] 

그것뿐만 아니라 저장 수집의 모든 필드를 얻을 수 있나요

은이 코드를 사용하여 시도했다. 다음과 같은 형식으로 시도 할 수 있습니다.

[ 
{ 
    "stores": [{'name':'store1','id':'1'},{'name':'store3','id':'3'}], 
    "count": 2, 
    "Category": "cat1" 
}, 
{ 
    "stores": [{'name':'store1','id':'1'},{'name':'store2','id':'2'}], 
    "count": 2, 
    "category": "cat2" 
} 
] 

답변

1

다음과 같은 집계를 시도해 볼 수 있습니다. $push 연산자를 사용하여 store을 추가하십시오.

Store.aggregate([ 
    {$unwind: '$category'}, 
    {$group: { _id: '$category', count: {$sum: 1}, stores:{$push:{name:'$name', id:'$id'}}}}, 
    {$project: {_id:0, category: '$_id',count: 1, stores:1}} 
]); 
+0

고맙습니다. 그것은 작동합니다. 상점 배열에 대한 제한을 설정할 수있는 방법이 있습니까? 예 : cat1에 20 개의 매장이있는 경우 5 개만 검색하도록 설정할 수 있습니까? 검색 한 모든 문서에 한도를 설정할 수 있습니까? –

+0

당신은 오신 것을 환영합니다. 여기 스토리지 배열을 조각에 대한 http://stackoverflow.com/q/42258325/2683814보세요. 검색된 문서를 제한하기 위해 $ limit stage를 사용할 수 있습니다. – Veeram

관련 문제