簡體   English   中英

使用Java在MongoDB上迭代聚合

[英]Iterate over aggregation on MongoDB with Java

我目前在使用Java,聚合和mongodb時遇到一些問題。

我在mongodb中有2個集合。

示例集合:人

{
id: 1
name: "Oliver"
companyId: 5
}

示例集合:公司

{
id: 5
name: asdf
}

現在,我想按companyId / id(查找聚合?)加入這些集合,並要遍歷結果。 我不想將整個結果集加載到內存中,而是1迭代1。我想我需要某種游標(mongoCursor?)。

我正在使用Java和Spring。 因此,我可以使用Java Mongo驅動程序(版本:3.7.1)或提供Springframework的選項(版本5.0.6)。

編輯:

在以下示例中,Cursor.hasNext()始終為false。

DBObject match = new BasicDBObject("$match",
            new BasicDBObject("companyId", "id"));

    DBObject lookupFields = new BasicDBObject("from", "company");
    lookupFields.put("localField", "companyId");
    lookupFields.put("foreignField", "id");
    lookupFields.put("as", "personWithCompany");
    DBObject lookup = new BasicDBObject("$lookup", lookupFields);

    DBObject projectFields = new BasicDBObject("id", 1);
    projectFields.put("name", 1);
    projectFields.put("companyName", "$company.name);

    List<DBObject> pipeline = Arrays.asList(match, lookup, project);

    Cursor cursor = mongoTemplate.getCollection("person").aggregate(pipeline, AggregationOptions.builder().allowDiskUse(true).build());

    while (cursor.hasNext()) {
        DBObject dbObject = cursor.next();
    }
person.aggregate([
            "$lookup": {
                "from": "company",
                "localField": "companyId",
                "foreignField": "id",
                "as": "PersonDetails"
            },
      {$unwind: "$PersonDetails"}

]);

joining with Person Collection with company

暫無
暫無

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

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