Как получить доступ к вложенному элементу результата запроса монго, используя Java и R?

1

Я использую 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?

Теги:

1 ответ

0

Точечная запись должна работать на 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());
}

Сравните этот фрагмент кода с вашим и посмотрите. Вы должны заставить его работать нормально. Дайте мне знать, если это поможет или вам нужна дополнительная помощь по этому поводу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню