Итерация по агрегации на MongoDB с Java - PullRequest
0 голосов
/ 04 октября 2018

У меня в настоящее время есть некоторые проблемы с использованием java, агрегатов и mongodb.

У меня есть 2 коллекции в mongodb.

пример коллекции: person

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

пример коллекции: company

{
id: 5
name: asdf
}

Теперь я хочу присоединиться к этим коллекциям по companyId / id (агрегация поиска?) И выполнить итерациюрезультат.Я не хочу загружать весь набор результатов в память, скорее итерация 1 на 1. Я думаю, что мне нужен какой-то курсор (mongoCursor?).

Я работаю с Java и Spring.Поэтому у меня есть возможность использовать драйвер Java Mongo (версия: 3.7.1) или параметры, которые предоставляют Springframework (версия 5.0.6).

edit:

В следующем примере Cursor.hasNext () всегда ложно.

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

1 Ответ

0 голосов
/ 04 октября 2018
person.aggregate([
            "$lookup": {
                "from": "company",
                "localField": "companyId",
                "foreignField": "id",
                "as": "PersonDetails"
            },
      {$unwind: "$PersonDetails"}

]);

joining with Person Collection with company
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...