繁体   English   中英

MongoDB 3.2 Java驱动程序:如何使用AggregateOperation

[英]MongoDB 3.2 Java Driver: How To Use AggregateOperation

我对使用MongoDB AggregateOperation驱动程序执行$ ​​unwind活动的示例代码感兴趣。 AggregateOperation似乎与MongoDB版本3+ Java驱动程序相关联。

使用AggregateOperation,我如何展开下面显示的“ sizes”数组?

{ "_id" : ObjectId("56928aa190f425c1e987abc3d"), "item" : "Fleece-lined jeans", "sizes" : [ "30", "31", "38", "40", "42" ], "count" : 3 }

我在这个论坛上看到的聚合示例似乎主要使用BasicDBObject对象,并且这些显然与3版Java API混合使用。

您将必须在import org.bson.Document;调用静态方法parse import org.bson.Document; 类。

因此,以下代码行应在mongodb3.0驱动程序中为您解开sizes数组对象。

MongoClient client = new MongoClient();
        MongoDatabase mongoDatabase = client.getDatabase("test");
        MongoCollection<Document> mongoCollection = mongoDatabase
                .getCollection("unwind");

        List<Document> pipeline;

        pipeline = Arrays.asList(Document.parse("{$unwind:\"$sizes\"}"));

        List<Document> results = mongoCollection.aggregate(pipeline).into(
                new ArrayList<Document>());

        for (Document cur : results) {
            System.out.println(cur.toJson());
        }

对于3.2 Java驱动程序。

import static com.mongodb.client.model.Aggregates.unwind;

Bson unwind = unwind("$sizes");

        List<Bson> pipeline = asList(unwind);

        MongoClient c = new MongoClient();
        MongoCollection<Document> collection = c.getDatabase("test")
                .getCollection("unwind");

        List<Document> results = collection.aggregate(pipeline).into(
                new ArrayList<Document>());

        for (Document cur : results) {
            System.out.println(cur.toJson());
        }
    }

这里test是数据库, unwind是集合。 这展开了sizes数组对象,下面是输出文档。

{ "_id" : { "$oid" : "5692fed991b81360d23f1b54" }, "item" : "Fleece-lined jeans", "sizes" : "30", "count" : 3.0 }
{ "_id" : { "$oid" : "5692fed991b81360d23f1b54" }, "item" : "Fleece-lined jeans", "sizes" : "31", "count" : 3.0 }
{ "_id" : { "$oid" : "5692fed991b81360d23f1b54" }, "item" : "Fleece-lined jeans", "sizes" : "38", "count" : 3.0 }
{ "_id" : { "$oid" : "5692fed991b81360d23f1b54" }, "item" : "Fleece-lined jeans", "sizes" : "40", "count" : 3.0 }
{ "_id" : { "$oid" : "5692fed991b81360d23f1b54" }, "item" : "Fleece-lined jeans", "sizes" : "42", "count" : 3.0 }

上面的代码未使用在3.0版本的MongoDB Java驱动程序中已弃用的DBObject类。

在mongodb驱动程序的3.2版本中测试了3.0版本的代码,并且产生了相同的结果。

我尝试了这种解决方案。 它基于本文档

AggregateIterable<Document> iterable = db.getCollection("inventory").aggregate(asList(
            new Document("$unwind", "$sizes")
            ));

    iterable.forEach(new Block<Document>() {
        public void apply(Document document) {
            System.out.println(document.toJson());
        }
    });

暂无
暂无

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

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