0

所以情况就是这样:我有一个程序需要两个大的 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);
}
4

1 回答 1

1

那是因为您正在采取额外的步骤来更新。您无需手动解析 JSON,也无需执行 query-then-update,只需一步即可使用“where”子句进行更新。

像这样的东西:

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);

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

于 2013-07-11T14:29:15.480 回答