6

SpagoBI で groovy スクリプトを使用しています。アグリゲーションを使いたい。たとえば、次の集計を実行したい:

db.myCollection.aggregate(
   [
      {
        $group : {
           _id : { day: { $dayOfMonth: "$recvTime" } }

        }
      }
   ]
)

私は試した:

DBObject projectFields = new BasicDBObject('$dayOfMonth',"recvTime");
DBObject project=new BasicDBObject('$project',projectFields)

DBObject groupFields = new BasicDBObject( "_id",project);

DBObject group = new BasicDBObject('$group', groupFields);

iterable = db.getCollection('myCollection').aggregate(group)  

このエラーが発生しました:

An unexpected error occured while executing dataset: { "serverUsed" : "192.168.1.160:27017" , "errmsg" : "exception: invalid operator '$project'" , "code" : 15999 , "ok" : 0.0}

何か案は?

更新: Mongo シェルで実行されたクエリ

db['cygnus_/kurapath_enocean_power_enocean'].aggregate(
...    [
...       {
...         $group : {
...            _id : { day: { $dayOfMonth: "$recvTime" } }
...         }
...       }
...    ]
... );
{ "_id" : { "day" : 9 } }
{ "_id" : { "day" : 8 } }
{ "_id" : { "day" : 7 } }
{ "_id" : { "day" : 4 } }
{ "_id" : { "day" : 3 } }

mongo db に格納されているデータ:

db['cygnus_/kurapath_enocean_power_enocean'].find()
{ "_id" : ObjectId("55e81e9631d7791085668331"), "recvTime" : ISODate("2015-09-03T10:19:02Z"), "attrName" : "power", "attrType" : "string", "attrValue" : "2085.0" }
{ "_id" : ObjectId("55e81e9631d7791085668332"), "recvTime" : ISODate("2015-09-03T10:19:02Z"), "attrName" : "power", "attrType" : "string", "attrValue" : "2085.0" }
{ "_id" : ObjectId("55e81e9831d7791085668333"), "recvTime" : ISODate("2015-09-03T10:19:04Z"), "attrName" : "power", "attrType" : "string", "attrValue" : "2077.0" }
4

2 に答える 2

1

エラーから、集計は$project演算子を想定していないため、変数projectFieldsproject変数を変更して実際のパイプライン式を表示する必要があります。

DBObject dateFields = new BasicDBObject("$dayOfMonth", "$recvTime");
DBObject dateObject = new BasicDBObject("day", dateFields);

DBObject groupFields = new BasicDBObject( "_id", dateObject);
DBObject group = new BasicDBObject('$group', groupFields);

iterable = db.getCollection('myCollection').aggregate(group);
于 2015-09-08T14:51:03.463 に答える
0

SpagoBI では、MongoDB タイプのデータセットを作成する方法が 2 つあります。1) Query タイプのデータセットを使用し、JS 言語を使用する 2) Java クラス タイプのデータセットを使用し、Java でコードを記述する ソリューション 1 では、次のデータセットを作成する必要があります。クエリを入力し、データソース MongoDB を選択し、フィールド QUERY に、ここに書かれている仕様に従って js でクエリを書き込みます ( http://wiki.spagobi.org/xwiki/bin/view/spagobi_server/data_set#HQueryDataSet28Mongo29 )

「スクリプトの編集」ボタンは、クエリ文字列を変更するために使用され、ウィキでいくつかのヒントを見つけることができます。したがって、クエリが SQL の場合は、js または groovy スクリプトを使用してクエリ文字列を変更できます (たとえば、いくつかのロジックを適用してパラメーターまたはテーブル名を作成します)。

クエリを次のように表現できます。

Var query = db.myCollection.aggregate(
   [
      {
        $group : {
           _id : { day: { $dayOfMonth: "$recvTime" } }

        }
      }
   ]
)
于 2015-11-17T13:42:39.633 に答える