2017-02-16 7 views
0

Я новичок в Монго, я пытаюсь взять группу по значениям в поддокументе, и имеющую структуру коллекции Монго, как, как:Как группе Монго суб документ

{ 
"_id" : ObjectId("589d4e4b270f8b1635d400b1"), 
"myShopId" : 439, 
"products" : [ 
    { 
     "productId" : "1234", 
     "productName" : "sambarpowder 500 gm", 
     "productCategory" : "masala",   
     "mrp" : "90",   
     "_id" : ObjectId("589d595f6da20b72fe006ea9") 
    }, 
    { 
     "productId" : "5678", 
     "productName" : "moong dhal 200 gms",    
     "productCategory" : "dhal",    
     "mrp" : "38 ", 
     "_id" : ObjectId("589d595f6da20b72fe006eaa") 
    }, 
     { 
     "productId" : "5678", 
     "productName" : "moong dhal 200 gms",    
     "productCategory" : "dhal",    
     "mrp" : "38 ", 
     "_id" : ObjectId("589d595f6da20b72fe006eaa") 
    } 
], 
"isAlive" : 1, 
"__v" : 3 
} 

Здесь я хочу сделать группа в этом. для, например, в MySQL:

select productCategory from products where shopId = '439' groupby productCategory 

Как я могу достичь группу, в Монго югу документа

My Expected output is like : 

category : [{ 
    productCategory : masala 
    _id : ObjectId("589d595f6da20b72fe006ea9") 
}, 
{ 
    productCategory : dhal 
    _id : ObjectId("589d595f6da20b72fe006eaa") 
} 

]

+0

Я попытался, как этот db.shopProductDetails.group ({ "ключ": { "products.productCategory": правда }, "начальный": {}, «уменьшить ": function (obj, prev) {}, " cond ": { " shopId ":" 439 " } }); – karthik

+0

, но я получаю пустой элемент – karthik

+1

Этот вариант групповой команды устарел. Вместо этого используйте агрегацию '$ group'. https://docs.mongodb.com/manual/reference/operator/aggregation/group/. Для полного набора этапов трубопровода. https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/ – Veeram

ответ

3

Надежда это поможет,

db.test.aggregate([{ 
    $match: { 
     myShopId: 439 
    } 
    }, { 
    $unwind: "$products" 
    }, { 
    $group: { 
     _id: { 
     "productCategory": "$products.productCategory" 
     }, 
     "id": { 
     $first: "$products._id" 
     } 
    } 
    }]) 

Выход:

{ "_id": { "productCategory": "дхал"}, "идентификатор": ObjectId ("589d595f6da20b72fe006eaa")}

{ "_id": { "productCategory": "масала"}, "идентификатор": ObjectId ("589d595f6da20b72fe006ea9")}

+0

Он работает так, как я ожидаю, спасибо! .. – karthik

+1

как применить ограничение и смещение в том же сценарии? –

+0

Это будет работать: db.test.aggregate ([{$ match: {myShopId: 439}}, {$ unwind: "$ products"}, {$ limit: 8}, {$ skip: 5}, {$ group : {_ id: {"productCategory": "$ products.productCategory"}, "id": {$ first: "$ products._id"}}}]) – karthik