0

私はJavaでこのMongoDBのクエリ書いた:グループと合計が

db.collection.aggregate(
    { $group : { 
     _id : { "category" : "$category", "type" : "$type" }, 
     number : { $sum : 1 } 
    } }, 
    { $group : { 
     _id : "$_id.category", 
     number : { $sum : 1 } 
    } } 
) 

を、コードはそれがエラー

com.mongodb.CommandFailureException: { "serverUsed" : "localhost/127.0.0.1:27017" , "errmsg" : "exception: invalid operator '$sum'" , "code" : 15999 , "ok" : 0.0} 
at com.mongodb.CommandResult.getException(CommandResult.java:71) 
at com.mongodb.CommandResult.throwOnError(CommandResult.java:110) 
at com.mongodb.DBCollection.aggregate(DBCollection.java:1308) 

に与え

DBObject group1 = new BasicDBObject(); 
group1.put("_id", new BasicDBObject("invoiceNo", "$invoiceNo") 
     .append("invoiceDate", "$invoiceDate") 
     .append("count", new BasicDBObject("$sum",1))); 

DBObject group2 = new BasicDBObject(); 
group2.put("_id", new BasicDBObject("invoiceNo", "$_id.invoiceNo") 
     .append("count", new BasicDBObject("$sum",1))); 

AggregationOutput output = dummyColl.aggregate(new BasicDBObject("$group", group1), 
     new BasicDBObject("$group", group2)); 

てくださいですエラーを理解する手助けをしてください。あなたのコード

group1.put("_id", new BasicDBObject("invoiceNo", "$invoiceNo") 
    .append("invoiceDate", "$invoiceDate") 
    .append("count", new BasicDBObject("$sum",1))); 

+0

しばらくはあなたのグループのパイプラインのために異なるキーを持っているという点で全く異なっています。 – chridam

答えて

1

$group: { 
    "_id": 
    { 
     "invoiceNo": "$invoiceNo", 
     "invoiceDate": "$invoiceDate", 
     "count": { "$sum", 1 } 
    } 
} 

の類似体であるが、代わりに何が必要そう最初のクエリがされる

$group: { 
    "_id": { "invoiceNo": "$invoiceNo", "invoiceDate": "$invoiceDate" }, 
    "count": { "$sum", 1 } 
} 

ある

group1.put("_id", new BasicDBObject("invoiceNo", "$invoiceNo") 
    .append("invoiceDate", "$invoiceDate"); 
group1.put("count", new BasicDBObject("$sum", 1)); 

あなたのMongoDBシェルクエリとJavaコード二

group2.put("_id", new BasicDBObject("invoiceNo", "$_id.invoiceNo")); 
group2.put("count", new BasicDBObject("$sum", 1));