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 shell 中执行的查询

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运算符,因此您应该更改projectFieldsandproject变量以显示实际的管道表达式,即

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 中,您有 2 种方法来创建 MongoDB 类型的数据集:1)使用 Query 类型的数据集并使用 JS 语言 2)使用 java 类类型的数据集并在 java 中编写代码对于解决方案 1,您应该创建一个数据集键入查询,选择数据源 MongoDB 并在字段 QUERY 中写入 js 中的查询,遵循此处编写的规范(http://wiki.spagobi.org/xwiki/bin/view/spagobi_server/data_set#HQueryDataSet28Mongo29

“编辑脚本”按钮用于修改查询字符串,您可以在 wiki 中找到一些提示。因此,如果查询是 SQL,您可以使用 js o groovy 脚本来更改查询字符串(例如应用一些逻辑来创建参数或表名)

您可以用这种方式表达您的查询:

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

        }
      }
   ]
)
于 2015-11-17T13:42:39.633 回答