2017-02-18 3 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'] 
} 
] 

Я хочу, чтобы магазины, сгруппированных по их категориям, я хотите получить имена магазинов и идентификаторы.

Я попытался с помощью этого кода:

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

Благодарим за код. Оно работает. Есть ли способ установить предел для массива магазинов. Пример: если у меня есть 20 магазинов в cat1, могу ли я установить его для загрузки только 5. Могу ли я установить лимит на все извлеченные документы? –

+0

Добро пожаловать. Посмотрите здесь http://stackoverflow.com/q/42258325/2683814 для массива магазинов нарезки. Вы можете использовать $ limit stage для ограничения полученных документов. – Veeram

Смежные вопросы