java - 如何在 MongoDB Java 驱动程序中编写带有添加操作的 group by

标签 java mongodb mongodb-query aggregation-framework

在下面的查询中,我正在对一个字段进行添加(该字段以 ISO 日期作为值),然后从该字段中提取小时,然后按小时分组

db.campaigns.aggregate([
    {$group : { _id: {$hour:{$add:['$time', 19800000]}}}}
])


Sample record of the collection    

db.campaigns.findOne()
{
    "_id" : ObjectId("53c7afdab92be74745af9068"),
    "time" : ISODate("2013-03-08T12:25:24.973Z"),
    "type" : "annoying",
    "PINGS" : 143
}

上面的在 Mongo shell 中运行良好,

我正在尝试用 Java 编写此查询

这是我的部分Java代码

DBObject group2Fields = new BasicDBObject();
group2Fields.put("hour", new BasicDBObject("$hour", new BasicDBObject("$add",new BasicDBObject("time",19800000))));
DBObject group2 = new BasicDBObject("_id", group2Fields);
DBObject secondGroup = new BasicDBObject("$group", group2);

我收到“errmsg”:“异常:$表达式内部不允许包含字段”

最佳答案

试试这个:

    DBObject group2Fields = new BasicDBObject();
    BasicDBList addObjects = new BasicDBList();
    addObjects.add("$time");
    addObjects.add(19800000);
    group2Fields.put("$hour", new BasicDBObject("$add", addObjects));
    DBObject group2 = new BasicDBObject("_id", group2Fields);
    DBObject secondGroup = new BasicDBObject("$group", group2);

关于java - 如何在 MongoDB Java 驱动程序中编写带有添加操作的 group by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25140739/

相关文章:

Mongodb 聚合管道大小和速度问题

mongodb - 如何停止在 mongodb 集合中插入重复文档

java - 与所有者框架异步打开 JDialog 的问题

java.lang.VerifyError,类的数据核增强之后

java - 如何在 Java 迭代器中使用 ExecutorService,而不会有资源泄漏的风险

Java——界面设计

javascript - 如何有条件地从头开始重新启动 promise 链?

node.js - 如果不存在,Mongoose.connect 不会创建数据库

javascript - 如何在带有字符串变量的mongoDB查询中使用$regex?

spring - MongoDB $pull 数组 2 级