我尝试制作此程序,但出现此错误


  无法转换为org.bson.BSONObject


我不知道程序的结构是否正常。我想做一个程序来搜索数据库(mongoDB)并向我显示所有事件,但是当我有一个pageLoad事件时,我想检查它是否具有URL并进行打印,否则它应该再次搜索下一个事件,直到再次出现pageLoad事件。这样一个循环。
例如,结果必须像这样。


mouseMove
mouseMove
mouseMove
点击
滚动
点击
pageLoad .... // htttp://www......url(1)..... e.x
mouseMove
点击
pageLoad .... // htttp://www......url(2)..... e.x




MongoClient mongoClient;
DB db;

mongoClient = new MongoClient("localhost", 27017);
db = mongoClient.getDB("behaviourDB_areas");

DBCollection cEvent = db.getCollection("event");
BasicDBObject orderBy = new BasicDBObject();
orderBy.put("timeStamp", 1);
DBCursor cursorEvents = null;
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("user_id", "55b20db905f333defea9827f");
cursorEvents = cEvent.find(searchQuery).sort(orderBy);

if (cursorEvents.hasNext()) {

  while ((((BSONObject) db.getCollection("event")).get("type") != "pageLoad")) {

    System.out.println(cursorEvents.next().get("type").toString());


    if (((BSONObject) db.getCollection("event")).get("type") == "pageLoad") {

      System.out.println(cursorEvents.next().get("url").toString());

    }
  }
}
mongoClient.close();
}
}

最佳答案

要使用游标遍历查询的结果,请使用以下代码:

while (cursorEvents.hasNext()) {
    DBObject documentInEventCollection = cursorEvents.next();
    // do stuff with documentInEventCollection
}


此外,请勿尝试将String==!=进行比较。那不会比较实际的字符串,而是对象引用。如果要检查文档的type字段是否等于字符串pageLoad,请使用以下代码:

if ("pageLoad".equals(documentInEventCollection.get("type")) {
    // do something
} else {
    // do something else
}

10-05 23:06