[英]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.