簡體   English   中英

如何在MongoDB Java驅動程序中使用添加操作編寫分組依據

[英]How to write group by with add operation in MongoDB Java driver

在以下查詢中,我正在向字段(此字段具有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”:“例外:$ expressions內不允許包含字段”

嘗試這個:

    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);

在代碼中嵌套調用通常可以幫助您“可視化”所需的結構:

    BasicDBList addArgs = new BasicDBList();
    addArgs.add("$time");
    addArgs.add(19800000);

    DBObject group = new BasicDBObject("$group",
        new BasicDBObject("_id",
           new BasicDBObject("$hour",
              new BasicDBObject("$add", addArgs)
           )
        )
    );

當然,哪個會產生像這樣序列化的group變量:

{ "$group" : { "_id" : { "$hour" : { "$add" : [ "$time" , 19800000]}}}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM