繁体   English   中英

如何在mongoDB中使用语态获取Accumulator结果?

[英]How to get Accumulator result using morphia in mongoDB?

我在Java中将Morphia与MongoDB结合使用,我喜欢在聚合查询中获取大量记录,如下所示:

AggregationPipeline pipCount = ds.createAggregation(MyTable.class)
            .match(query1)
            .match(query2)
            .unwind("transactions")
            .match(query3)
            .group("_id", grouping("_id"), grouping("count", new Accumulator("$sum", 1)));
Iterator<MyTable> result = pipCount.aggregate(MyTable.class);

我需要使用grouping(“ _ id”)删除重复的结果,然后计算结果,但是找不到任何读取总和值的方法...知道吗?

样本数据:

{
    "_id": "00000222",
    "create_date": ISODate("2015-05-06T07:20:31.000+0000"),
    "update_date": ISODate("2015-05-06T07:20:31.000+0000"),
    "payment": 70.0,
    "fee": 0.0,
    "type": "RECURRING",
    "currency": "USD",
    "status": "OK",
    "transactions": [{
        "_id": "111111223",
        "amount": 1260.0,
        "fee_type": "VARIABLE_ADD",
        "fee_rate": 2.75,
        "status": "ERROR",
        "charges": [{
            "_id": "2222223344",
            "amount": 1000.0,
            "recurring": true,
            "firstTime": false,
            "oneTime": true,
        }, {
            "_id": "222222222233221",
            "amount": 70.0,
            "recurring": true,
            "firstTime": true,
            "oneTime": true,
        }]
    }],
    "users": {
        "_id": "33333333332212",
        "update_date": ISODate("2015-12-18T08:03:35.000+0000"),
        "user_id": "sdjfhsd@skjksdf.com",
        "first_name": "dsjfj",
        "last_name": "skdfjf",
    }
}

结果:1

您可以尝试这样。 您不需要额外的分组。 第一组将在计算总和并计划计数并将响应映射到文档并读取计数的同时处理重复项。

import org.bson.Document; 

AggregationPipeline pipCount = datastore.createAggregation(MyTable.class)
            .match(query1)
            .match(query2)
            .unwind("somethingID")
            .match(query3)
            .group("_id", grouping("count", new Accumulator("$sum", 1)))
            .project(Projection.projection("count"));

    Iterator<Document> result = pipCount.aggregate(Document.class);

    while (result.hasNext()) {
        Document document = result.next();
        Integer count = document.getInteger("count");
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM