mongodb中update的使用

由于在使用mongodb的过程中有碰到下面的问题,所以写下来方便以后查阅。

下面是一段示例代码:

Mongo mongo = new Mongo("localhost", 27017); 
DB db = mongo.getDB("abc"); 
DBCollection collection = db.getCollection("aaa");
DBObject query = new BasicDBObject();
query.put("xx", xx);
DBObject record = new BasicDBObject();
record.put("xxx", xxx);
collection.update(query, record, true, true);

在运行程序之前,mongodb中并不存在abc这个DB,也不存在aaa这个collection。

但是,按照正常情况,通过调用getDB获取数据库,如果是数据库不存在的情况下,会自动创建该数据库。同理,调用getColletion的时候,也会自动创建不存在的Colletion。

结果,运行程序之后发现,​mongodb中确实创建了abc这个数据库,但是还是不存在aaa这个Collection。

难道是getCollection调用的有问题,所以会创建失败?

可是调试的时候,这里并没有出现异常啊,而且能够正常的执行完update。

​那难道是update的时候插入数据失败了?由于没有数据,导致了Colletion也不会去创建?

查看了一下​​update的说明,第三个参数(upsert if the database should create the element if it does not exist)说明如果query的记录不存在的话,会直接新创建一条记录,那按道理应该不会出现插入数据失败的情况啊?

实在没办法,只好先把update试着用insert代替看能不能成功。结果发现改完之后的程序正常了!

所以,问题就是出在了update当中!回过头再仔细的研究了一下update的说明,发现了一个小细节(An object will not be inserted if it does not exist in the collection and upsert=true and multi=true.)。

​​​​好了,那么问题也就解决了。

以后需要注意的有两点:

  1. 对于不存在的Colletion来说,使用getColletion的时候,只有在插入了数据之后,才会去创建​该Colletion。

  2. upsert和multi两个参数同时为true时, 就算Colletion中不存在满足query条件的记录, update操作也不会去直接添加该记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值