使用java驱动程序更新mongodb需要永远吗?

时间:2013-07-11 13:28:53

标签: java mongodb csv

所以情况就是这样:我有一个程序,它接受两个大的csv文件,找到差异,然后将一个数组列表发送到一个方法,该方法应该用数组中的行更新mongodb。问题是更新正在进行中。具有5000次更新的测试用例需要36分钟。这是正常的吗?

update(List<String> changes) - 方法如下:

mongoClient = new MongoClient(ip);
db = mongoClient.getDB("foo");
collection = db.getCollection("bar");

//for each line of change
for (String s : changes) {
    //splits the csv-lines on ;
    String[] fields = s.split(";");

    //identifies wich document in the database to be updated
    long id = Long.parseLong(fields[0]);
    BasicDBObject sq = new BasicDBObject().append("organizationNumber",id);

    //creates a new unit-object, that is converted to JSON and then inserted into the database.
    Unit u = new Unit(fields);
    Gson gson = new Gson();
    String jsonObj = gson.toJson(u);
    DBObject objectToUpdate = collection.findOne(sq);
    DBObject newObject = (DBObject) JSON.parse(jsonObj);

    if(objectToUpdate != null){
        objectToUpdate.putAll(newObject);
        collection.save(objectToUpdate);
}

1 个答案:

答案 0 :(得分:1)

那是因为您正在采取额外步骤进行更新。 您不需要手动解析JSON,只需在一个步骤中使用“where”子句进行更新,就不必执行query-then-update。

这样的事情:

BasicDBObject query= new BasicDBObject().append("organizationNumber",id);
Unit unit = new Unit(fields);
BasicDBObject unitDB= new BasicDBObject().append("someField",unit.getSomeField()).append("otherField",unit.getOtherField());
collection.update(query,unitDB);

query指定“where”子句,unitDB指定需要更新的字段。