mongodb的更新和morphia的相关操作

一、mongoDB

 

mongoDB是目前最接近关系型数据库的一种Key-value 数据库。它支持基本的增删改查,也支持索引;但不支持事务和join操作。

mongodb和传统的关系型数据的差别,体现在设计阶段,就是设计思路的转变。使用mongodb需要更多的关注实际的业务,要考虑如何组织数据能让业务使用的更方便合理;而关系型数据库由于已经有了很多比较明确的设计方式,使用起来有据可循。

mongodb中的一些概念和传统关系型数据库的比较

mongodb          rmdb
database       database
collection       table
document       record
index             index


mongodb服务器使用C语言开发的,提供了多种常用语言的编程接口,这里以Java做示例。

二、mongdoDB的更新操作

mongdb在传统的更新操作之外,还支持原子操作和就地更新(in-place update)。
java的update接口在类DBCollection中实现:

public abstract void update( DBObject q , DBObject o , boolean upsert , boolean multi ) throws MongoException ;

 上述方法签名,包含了一个upsert的概念,upsert可以理解为,更新一个document,如果该document不存在,那么就插入一个新的。

q         用来找出要更新的旧对象

o         要做的更新操作

upsert  是否使用upsert的方式

multi    当q找到多个对象时,multi=true则全都更新,=false(缺省的)则只更新第一个

 


三、morphia及其对mongdoDB更新操作的支持

morphia是一个针对于mongodb的轻量级的ORM(Morphia is a lightweight type-safe library for mapping your Java objects to/from MongoDB)。目前其官网(http://code.google.com/p/morphia/)上发布的是0.94的SNAPSHOT版。

 

前面所述mongodb的更新方式,morphia给予了支持,具体见下面代码段:

	private <T> UpdateResults<T> update(Query<T> query, DBObject u, boolean createIfMissing, boolean multi) {
		DBCollection dbColl = getCollection(((QueryImpl<T>) query).getEntityType());
		DBObject q = ((QueryImpl<T>) query).getQueryObject();
		if (q == null)
			q = new BasicDBObject();
		dbColl.update(q, u, createIfMissing, multi);
		DBObject dbObj = dbColl.getDB().getLastError();
		return new UpdateResults<T>(dbObj);
	}

 

上述代码在DatastoreImpl中,DatastoreImpl实现了Datastore接口,这个接口是morphia的核心接口,对外提供数据库的各种操作。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值