mongo aggregate聚合出现没有配置游标问题:The cursor option is required

应该是由于mongodb的版本问题,据说升级版本就OK了。如果非要不换版本,请参考一下代码使用聚合操作。

List result = new ArrayList<>();
DBCollection collection = mongoTemplate.getCollection("dc_core_report");
//管道操作集合
List items = new ArrayList<>();
//unwind操作
DBObject unwind = new BasicDBObject();
unwind.put("$unwind", "$columns");//unwind的属性是带“$”的
items.add(unwind);
//or操作项
List or = new ArrayList<>();
DBObject orItem = new BasicDBObject();
orItem.put("columns._id", colId);//unwind后的column是没有“$”的
or.add(orItem);
orItem = new BasicDBObject();
orItem.put("columns._id", new ObjectId(colId));
or.add(orItem);
//match操作
DBObject match = new BasicDBObject();
match.put("$match", new BasicDBObject("appId", appId).append("$or", or));//match操作包含or操作
items.add(match);
//聚合,返回游标对象
Cursor cursor = collection.aggregate(items, com.mongodb.AggregationOptions.builder().outputMode(com.mongodb.AggregationOptions.OutputMode.CURSOR).build());
//遍历游标
while (cursor.hasNext()){
	DBObject dbObject = cursor.next();
	JSONObject jo = new JSONObject();
	String id = dbObject.get("_id") == null ? "" : dbObject.get("_id").toString();
	String reportTypeId = dbObject.get("reportTypeId") == null ? "" : dbObject.get("reportTypeId").toString();
	String title = dbObject.get("title") == null ? "" : dbObject.get("title").toString();
}

你可能感兴趣的:(MongoDB)