问题描述
BasicDBObject result = (BasicDBObject)mongoTemplate.execute(js);
最多只能返回101条数据,js脚本结果没有toArray()
问题出现的环境背景及自己尝试过哪些方法
更换,Java mongoTemplate,mongoDB 数据库版本,
使用不通访问方法
Object object1 = mongoTemplate.getDb().doEval(js.toString());
Object object2 = mongoTemplate.getDb().command(bson);
Object object3 = mongoTemplate.getCollection("$cmd").findOne(bson);
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
public List<VmGroupInfo> searchVmPerformance(String organizationUuid, Double cpuUsageMin, Double cpuUsageMax,
Double memUsageMin, Double memUsageMax, Date startTime,
Date endTime) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy,MM,dd");
StringBuffer js = new StringBuffer();
List<VmGroupInfo> list = new ArrayList<>();
js.append("db.topNVmGroupInfo.aggregate([ ");
js.append("{ ");
js.append(" $match : { ");
js.append(" count : { ");
js.append(" $gt : 0 ");
js.append(" }, ");
js.append(" $or : [ { ");
js.append(" day : { ");
js.append(" $gte : new Date('" + sdf.format(startTime) + "'), ");
js.append(" $lte : new Date('" + sdf.format(endTime) + "') ");
js.append(" }, ");
js.append(" type : { ");
js.append(" $eq : 1 ");
js.append(" } ");
js.append(" } ] ");
js.append(" } ");
js.append("}, ");
js.append("{ ");
js.append(" $group : { ");
js.append(" _id : '$_id', ");
js.append(" count : { ");
js.append(" $sum : '$count' ");
js.append(" }, ");
js.append(" cpuTotal : { ");
js.append(" $sum : '$cpuTotal' ");
js.append(" }, ");
js.append(" memTotal : { ");
js.append(" $min : '$memTotal' ");
js.append(" }, ");
js.append(" displayName : { ");
js.append(" $last : '$displayName' ");
js.append(" }, ");
js.append(" name : { ");
js.append(" $last : '$name' ");
js.append(" }, ");
js.append(" clusterName : { ");
js.append(" $last : '$clusterName' ");
js.append(" }, ");
js.append(" hypervisorType : { ");
js.append(" $last : '$hypervisorType' ");
js.append(" }, ");
js.append(" cpuNumber : { ");
js.append(" $last : '$cpuNumber' ");
js.append(" }, ");
js.append(" memSize : { ");
js.append(" $last : '$memSize' ");
js.append(" }, ");
js.append(" cpuMax : { ");
js.append(" $max : '$cpuMax' ");
js.append(" }, ");
js.append(" memMax : { ");
js.append(" $max : '$memMax' ");
js.append(" }, ");
js.append(" businessUuid : { ");
js.append(" $last : '$businessUuid' ");
js.append(" }, ");
js.append(" businessName : { ");
js.append(" $last : '$businessName' ");
js.append(" }, ");
js.append(" instanceUuid : { ");
js.append(" $last : '$instanceUuid' ");
js.append(" }, ");
js.append(" organizationUuid : { ");
js.append(" $last : '$organizationUuid' ");
js.append(" }, ");
js.append(" organizationName : { ");
js.append(" $last : '$organizationName' ");
js.append(" }, ");
js.append(" ip : { ");
js.append(" $last : '$ip' ");
js.append(" }, ");
js.append(" appName : { ");
js.append(" $last : '$appName' ");
js.append(" } ");
js.append(" } ");
js.append("}, ");
js.append("{ ");
js.append(" $project : { ");
js.append(" _id : 1, ");
js.append(" avgCpu : { ");
js.append(" $divide : [ '$cpuTotal', '$count' ] ");
js.append(" }, ");
js.append(" avgMem : { ");
js.append(" $divide : [ '$memTotal', '$count' ] ");
js.append(" }, ");
js.append(" cpuMax : 1, ");
js.append(" memMax : 1, ");
js.append(" displayName : 1, ");
js.append(" businessUuid : 1, ");
js.append(" businessName : 1, ");
js.append(" name : 1, ");
js.append(" instanceUuid : 1, ");
js.append(" organizationUuid : 1, ");
js.append(" organizationName : 1, ");
js.append(" clusterName : 1, ");
js.append(" hypervisorType : 1, ");
js.append(" cpuNumber : 1, ");
js.append(" memSize : 1, ");
js.append(" ip : 1, ");
js.append(" appName : 1 ");
js.append(" } ");
js.append("}, ");
js.append("{ ");
js.append(" $match : { ");
//js.append(" avgCpu : { ");
js.append(" cpuMax : { ");
//js.append(" $gte : " + cpuUsageMin + ", ");
js.append(" $lte : " + cpuUsageMax + " ");
js.append(" }, ");
//js.append(" avgMem : { ");
js.append(" memMax : { ");
//js.append(" $gte : " + memUsageMin + ", ");
js.append(" $lte : " + memUsageMax + " ");
if(StringUtils.isNotEmpty(organizationUuid)) {
js.append(" }, ");
js.append(" organizationUuid : { ");
js.append(" $regex : /" + organizationUuid + ".*/i ");
js.append(" } ");
}else{
js.append(" } ");
}
js.append(" } ");
js.append("} ]) ");
NamedMongoScript mongoScript = new NamedMongoScript("searchVmPerformance", js.toString());
// BasicDBObject bson = new BasicDBObject();
// bson.put("$eval",js.toString());
//
// Object object1 = mongoTemplate.getDb().doEval(js.toString());
// Object object2 = mongoTemplate.getDb().command(bson);
// Object object3 = mongoTemplate.getCollection("$cmd").findOne(bson);
// ExecutableMongoScript executableMongoScript = new ExecutableMongoScript(js.toString());
// System.out.println(js.toString());
ScriptOperations scriptOps = mongoTemplate.scriptOps();
//
//Object obj4 = scriptOps.execute(mongoScript.getScript(),new Object[] {});
// 使用'echo'作为脚本的名称来存储脚本。给定的名称标识脚本并允许稍后调用它。
scriptOps.register(new NamedMongoScript("topN", js.toString()));
// 使用提供的参数执行名为“echo”的脚本。
Object call = scriptOps.call("topN");
//Object obj = scriptOps.execute(mongoScript.getScript(), new Object[] {});
//BasicDBObject result = (BasicDBObject) obj;
// while (dbCursor.hasNext()) {
// DBObject dbObject = dbCursor.next();
// System.out.println("* " + dbCursor.next());
// Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new ParseJsonToDate())
// .setDateFormat("'yyyy-MM-dd'").create();
// VmGroupInfo fromJson = gson.fromJson(gson.toJson(dbObject), VmGroupInfo.class);
// list.add(fromJson);
// }
//
// try {
// dbCursor.close();
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// Map map = result.toMap();
// Object obj = map.get("_firstBatch");
//
// System.out.println(js.toString());
// ArrayList<Object> arrays = gson.fromJson(gson.toJson(obj), ArrayList.class);
// for (Object _temp : arrays) {
// Gson gson2 = new Gson();
// VmGroupInfo vmGroupInfo = gson2.fromJson(gson2.toJson(_temp), VmGroupInfo.class);
// list.add(vmGroupInfo);
// }
Collections.reverse(list);
return list;
}
你期待的结果是什么?实际看到的错误信息又是什么?
BasicDBObject result = (BasicDBObject)mongoTemplate.execute(js);为什么最多返回的101 条数据
对象里面的“firstBath” 是谁存的