Java中的Mongo聚合:具有多个字段的组

乌奈·桑切斯(Unai Sanchez)

我正在尝试使用mongo-java-driver在Java中执行聚合操作。我还执行了其他一些查找操作,但是无法在Java中正确进行以下聚合:

db.I1.aggregate([
    { "$match": { "ci": 862222} },
    { "$match": { "gi": { "$ne": null } }},
    { "$group": {
        "_id": {
            "ci": "$ci",
            "gi": "$gi",
            "gn": "$gn",
            "si": "$si"
        }
    }},
    { "$group": {
        "_id": {
            "ci": "$_id.ci",
            "gi": "$_id.gi",
            "gn": "$_id.gn"
        },
        "sn": { "$sum": 1 }
    }},
    { "$sort" : { "_id.gi" : 1}}
])

我尝试了几种方法和方法来在Java中执行该聚合,但是无法"ci", "gi", "gn","si"coll.aggregate(asList())方法中正确包含组字段到目前为止,我得到的是以下内容:

MongoCollection<Document> coll = mongo.getCollection("I1");

Document matchCourse = new Document("$match",
    new Document("ci", Integer.parseInt(courseid)));

Document matchGroupNotNull = new Document("$match",
    new Document("gi", new Document("$ne", null)));

List<Object> list1 = new BasicDBList();
    list1.add(new BasicDBObject("ci", "$ci"));
    list1.add(new BasicDBObject("gi", "$gi"));
    list1.add(new BasicDBObject("gn", "$gn"));
    list1.add(new BasicDBObject("si", "$si"));

Document group1 = new Document(
    "_id", list1).append("count", new Document("$sum", 1));

List<Object> list2 = new BasicDBList();
list2.add(new BasicDBObject("ci", "$_id.ci"));
list2.add(new BasicDBObject("gi", "$_id.gi"));
list2.add(new BasicDBObject("gn", "$_id.gn"));

Document group2 = new Document(
    "_id", list2).append("sn", new Document("$sum", 1));

Document sort = new Document("$sort", 
    new Document("_id.gi", 1));

AggregateIterable<Document> iterable = coll.aggregate(asList(matchCourse,
    matchGroupNotNull, group1, group2, sort));

我知道这是不正确的,但我将其包括在内是为了让您了解我在做什么。我已经用许多不同的方式在Google上进行了搜索,并阅读了几页,但没有找到任何解决方案。MongoDB的Java的(现有的文件12)是太短了,我和不包括这种情况。

如何使用Java执行该查询?任何帮助,将不胜感激。

非常感谢你!!

乌奈·桑切斯(Unai Sanchez)

终于我找到了解决方案。我发布的问题中存在一些错误,因为这是在达到绝望的时刻之后的最后一次尝试,但是最后,这是最终的解决方案:

MongoDatabase mongo = // initialize your connection;
Document matches = new Document("$match",
    new Document("gi", new Document("$ne", null))
    .append("ci", Integer.parseInt(courseid)));

Document firstGroup = new Document("$group",
    new Document("_id",
        new Document("ci", "$ci")
        .append("gi", "$gi")
        .append("gn", "$gn")
        .append("si", "$si"))
    .append("count", new Document("$sum", 1)));

Document secondGroup = new Document("$group",
    new Document("_id",
        new Document("ci", "$_id.ci")
        .append("gi", "$_id.gi")
        .append("gn", "$_id.gn"))
    .append("ns", new Document("$sum", 1))); 

Document sort = new Document("$sort", 
    new Document("_id.gi", 1));             

List<Document> pipeline = Arrays.asList(matches, firstGroup,
    secondGroup, sort);
AggregateIterable<Document> cursor = mongo.getCollection("I1")
    .aggregate(pipeline);

for(Document doc : cursor) { // do stuff with doc }

我没有尝试创建键值列表,而是将元素附加到文档中。希望它对某人有用!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当使用Spring Data Mongo聚合mongodb中的组时,如何获取具有非空数组字段的元素计数?

来自分类Dev

Django在具有多个值的多个字段中搜索

来自分类Dev

elasticsearch中多个字段的聚合

来自分类Dev

具有 mongodb 聚合的多个组

来自分类Dev

基于具有相似值的多个字段的MongoDB聚合查询

来自分类Dev

ES中具有多个字段的通配符查询?

来自分类Dev

Spring中具有相同名称的多个字段

来自分类Dev

Elasticsearch等效SQL In Query中具有多个字段

来自分类Dev

在多个字段中查找具有相同数据的记录

来自分类Dev

Spring中具有相同名称的多个字段

来自分类Dev

datepicker具有逻辑的多个字段,仅在少数几个字段中显示月份

来自分类Dev

在Mongo中具有聚合的嵌套查询

来自分类Dev

比较Mongo聚合查询中的2个字段

来自分类Dev

Mongo DB-聚合中两组字段的并集

来自分类Dev

具有多个字段的子查询

来自分类Dev

QInputDialog具有多个字段

来自分类Dev

折叠具有多个字段的行

来自分类Dev

创建具有多个字段的索引

来自分类Dev

Lucene Queryparser具有多个字段

来自分类Dev

聚合 - 展开多个字段

来自分类Dev

如何使用mongo聚合将两个或多个字段分组以找到不同的字段

来自分类Dev

在一个 rethinkdb 查询中聚合多个字段

来自分类Dev

如何将具有多个聚合字段和多个索引字段的pandas数据框旋转到python中的sumIfs?

来自分类Dev

如何在某些字段中聚合具有相同值的多个对象?

来自分类Dev

具有动态字段名称的mongo组查询

来自分类Dev

仅使用不同 ArrayList 中的一个字段搜索具有多个字段的 ArrayList

来自分类Dev

在C中递归删除单个链接列表中具有多个字段的节点

来自分类Dev

通过Java流组和多个字段

来自分类Dev

Java中具有多个条件字段的动态排序

Related 相关文章

  1. 1

    当使用Spring Data Mongo聚合mongodb中的组时,如何获取具有非空数组字段的元素计数?

  2. 2

    Django在具有多个值的多个字段中搜索

  3. 3

    elasticsearch中多个字段的聚合

  4. 4

    具有 mongodb 聚合的多个组

  5. 5

    基于具有相似值的多个字段的MongoDB聚合查询

  6. 6

    ES中具有多个字段的通配符查询?

  7. 7

    Spring中具有相同名称的多个字段

  8. 8

    Elasticsearch等效SQL In Query中具有多个字段

  9. 9

    在多个字段中查找具有相同数据的记录

  10. 10

    Spring中具有相同名称的多个字段

  11. 11

    datepicker具有逻辑的多个字段,仅在少数几个字段中显示月份

  12. 12

    在Mongo中具有聚合的嵌套查询

  13. 13

    比较Mongo聚合查询中的2个字段

  14. 14

    Mongo DB-聚合中两组字段的并集

  15. 15

    具有多个字段的子查询

  16. 16

    QInputDialog具有多个字段

  17. 17

    折叠具有多个字段的行

  18. 18

    创建具有多个字段的索引

  19. 19

    Lucene Queryparser具有多个字段

  20. 20

    聚合 - 展开多个字段

  21. 21

    如何使用mongo聚合将两个或多个字段分组以找到不同的字段

  22. 22

    在一个 rethinkdb 查询中聚合多个字段

  23. 23

    如何将具有多个聚合字段和多个索引字段的pandas数据框旋转到python中的sumIfs?

  24. 24

    如何在某些字段中聚合具有相同值的多个对象?

  25. 25

    具有动态字段名称的mongo组查询

  26. 26

    仅使用不同 ArrayList 中的一个字段搜索具有多个字段的 ArrayList

  27. 27

    在C中递归删除单个链接列表中具有多个字段的节点

  28. 28

    通过Java流组和多个字段

  29. 29

    Java中具有多个条件字段的动态排序

热门标签

归档