Я использую Java и R для извлечения данных из моей базы данных и реализации прогнозирования. Мой json
в mongodb похож:
{
"Server" : [
{
"deviceName" : "NEWSCVMM",
"availability" : 100,
"osVersion" : "6.3.9600",
"averageResponseTime" : 0.422,
"useswapmemory" : "983040",
"freeswapmemory" : "983040",
"model" : "Virtual Machine",
"numberOfCpu" : "1",
"vendor" : "Microsoft Corporation",
"vmList" : [ ],
"macadd" : [ ],
"cpuInfo" : "Intel(R) Xeon(R) CPU X5670 @ 2.93GHz",
"memory" : "6188596",
"serialNo" : "00252-00000-00000-AA228",
"cpuUtilization" : 0,
}]
}
Я хочу получить доступ к cpuUtilization
из этого json. Я попытался получить доступ к вложенным значениям, используя (.), Но получим результат как NULL. Я также пытался выполнить одно и то же в R shell, но получить результат как NULL.
Вот что я пробовал до сих пор:
c.eval("query <- dbGetQuery(db,' mycollection','{\"hostId\":\"0.0.0.0\",\"windowsServer.cpuUtilization\":{\"$ne\":\"null\"},\"runtimeMillis\":{\"$ne\":\"null\"}}')");
c.eval("date <- query$runtimeMillis");
c.eval("host_id <- query$hostId");
c.eval("cpu <- query$Server.cpuUtilization");
c.eval("all_data<-data.frame(cpu,date)");
c.eval("training<- all_data");
c.eval("rf_fit<-randomForest(cpu~date,data=training,ntree=500)");
c.eval("new <- data.frame(date="+my_predicted_date+ ")");
c.eval("predictions<-predict(rf_fit,newdata=new)");
REXP memory_predictions= c.eval("predictions");
Как получить доступ к вложенным элементам в R-оболочке или с помощью java?
Точечная запись должна работать на Java, я использую ее довольно долго. Внимательно проверьте свой код, возможно, где-то может быть небольшая ошибка.
Можете ли вы разместить здесь часть своего кода? Тогда я могу взглянуть и прокомментировать.
Вот что я обычно делаю - Допустим, мой документ такой:
{_id:0, start : {x:10, y:50}, end : {x:20, y:100}}
{_id:1, start : {x:20, y:50}, end : {x:30, y:100}}
{_id:2, start : {x:30, y:50}, end : {x:40, y:100}}
Если я хочу запросить на основе значения "x" в поле "Пуск", я бы написал что-то вроде этого:
MongoClient client = new MongoClient();
DB db = client.getDB("YourDBNAME");
DBCollection collection = db.getCollection("YOURCOLLECTIONAME");
QueryBuilder builder = QueryBuilder().start("start.x").greaterThan("20");
DBCursor cur = collection.find(builder.get());
while(cursor.hasNext())
{
System.out.println(cursor.next());
}
Сравните этот фрагмент кода с вашим и посмотрите. Вы должны заставить его работать нормально. Дайте мне знать, если это поможет или вам нужна дополнительная помощь по этому поводу.