英文网站用什么字体好,没有安装 wordpress,一 网站建设的目的与意义,做网站是如何实施的首先列一下WriteConcern的几种抛出异常的级别参数#xff1a; WriteConcern.NONE:没有异常抛出WriteConcern.NORMAL:仅抛出网络错误异常#xff0c;没有服务器错误异常WriteConcern.SAFE:抛出网络错误异常、服务器错误异常#xff1b;并等待服务器完成写操作。WriteConcern.…首先列一下WriteConcern的几种抛出异常的级别参数 WriteConcern.NONE:没有异常抛出WriteConcern.NORMAL:仅抛出网络错误异常没有服务器错误异常WriteConcern.SAFE:抛出网络错误异常、服务器错误异常并等待服务器完成写操作。WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常并等待一个主服务器完成写操作。WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常写操作等待服务器将数据刷新到磁盘。WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常写操作等待服务器提交到磁盘的日志文件。WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常等待至少2台服务器完成写操作。 当我们执行如下操作时(将name为lily的age设置为20) db.update({name:lily},{$set:{age:20}}) 默认情况下该操作会使用WriteConcern.NORMAL仅在网络错误时抛出异常等同于 db.update({name:lily},{$set:{age:20}},WriteConcern.NORMAL) 使用NORMAL模式参数可以使得写操作效率非常高。但是如果此时服务器出错也不会返回错误给客户端而客户端会误认为操作成功。 因此在很多重要写操作中需要使用WriteConcern.SAFE模式保证可以感知到这个错误保证客户端和服务器对一次操作的正确性认知保持一致。 根据笔者测试如果服务器发生掉电情况客户端依然得不到当时操作的错误返回需要特别注意 另外在很多时候我们需要确切知道这次写操作是否成功或者本次更新操作影响了多少个对象这时候就需要 WriteResult ret db.update({name:lily},{$set:{age:20}});if(ret.getN()0) //操作影响的对象个数 return true;else return false; 或者 WriteResult ret db.update({name:lily},{$set:{age:20}});if(ret.getLastError() null) return true;else return false; 此时getLastError()会查询上次操作结果是否出现错误。 更进一步 然后由于mongodb中使用连接池的原因getLastError()需要再次从连接池中获取连接这样效率会慢一些。可以这样做 db.requestStart();WriteResult ret db.update({name:lily},{$set:{age:20}});if(ret.getLastError() null) return true;else return false;db.requestDone(); 就可以保证update操作和getLastError()使用同一个连接并且减少了一次存/取连接的过程。 还有一个方法 此时也可以使用WriteConcern.SAFE参数 WriteResult ret db.update({name:lily},{$set:{age:20}}, WriteConcern.SAFE);if(ret.getLastError() null) return true;else return false;// is equivalent to db.requestStart();WriteResult ret db.update({name:lily},{$set:{age:20}});if(ret.getLastError() null) return true;else return false;db.requestDone(); 这也是我推荐使用的方式这样即可以高效的得到返回结果还能感知到服务器错误一举两得。转载于:https://www.cnblogs.com/xinghebuluo/archive/2011/12/01/2270896.html