2016-01-22 71 views
0

我有一個在mongodb中的集合,其中我想運行查詢以返回每個serviceType的最小值servicecost。相關的字段有:mongodb2.6不返回最小值

> db.vendor_master.find({},{"serviceType":1,"servicecost":1,"_id":0}) 
{ "serviceType" : "Florist", "servicecost" : 10000 } 
{ "serviceType" : "Florist", "servicecost" : 10000 } 
{ "serviceType" : "DJ", "servicecost" : 10000 } 
{ "serviceType" : "Florist", "servicecost" : 10000 } 
{ "serviceType" : "Florist", "servicecost" : 10000 } 
{ "serviceType" : "Decorator", "servicecost" : 10000 } 
{ "serviceType" : "Decorator", "servicecost" : 10000 } 
{ "serviceType" : "Decorator", "servicecost" : 12000 } 
{ "serviceType" : "Pandit", "servicecost" : 3500 } 
{ "serviceType" : "Pandit", "servicecost" : 1000 } 
{ "serviceType" : "Pandit", "servicecost" : 5000 } 
{ "serviceType" : "Pandit", "servicecost" : 1000 } 
{ "serviceType" : "Florist", "servicecost" : 10000 } 
{ "serviceType" : "DJ", "servicecost" : 10000 } 
{ "serviceType" : "DJ", "servicecost" : 10000 } 
{ "serviceType" : "DJ", "servicecost" : 10000 } 
{ "serviceType" : "DJ", "servicecost" : 10000 } 
{ "serviceType" : "Band", "servicecost" : 1000 } 
{ "serviceType" : "Band", "servicecost" : 50000 } 
{ "serviceType" : "Band", "servicecost" : 152500 } 
{ "serviceType" : "Decorator", "servicecost" : 2000 } 
{ "serviceType" : "Decorator", "servicecost" : 25000 } 
{ "serviceType" : "Pandit", "servicecost" : 1000 } 
{ "serviceType" : "Band", "servicecost" : 12500 } 
{ "serviceType" : "Band", "servicecost" : 15000 } 

我想下面的查詢

db.vendor_master.aggregate([{$group:{_id:"serviceType",mincost:{$min:"servicecost"}}}]) 

輸出爲:

{ "_id" : "serviceType", "mincost" : "servicecost" } 

預期的輸出應該是每個serviceType最小servicecost

任何想法我錯過了什麼?

由於

回答

0

$min需要一個表達式作爲其操作數。

{ $min: <expression> } 

和表達必須用美元符號$前綴作爲documentation提到:

聚集表達式中使用field path訪問輸入文檔領域。要指定字段路徑,請使用以美元符號爲前綴的字符串$字段名稱或帶點字段名稱(如果該字段位於嵌入式文檔中)。

db.vendor_master.aggregate([ 
    { "$group": { 
     "_id": "serviceType", 
     "mincost": { "$min": "$servicecost" } 
    }} 
])