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的核心接口,对外提供数据库的各种操作。

 

 

你可能感兴趣的:(编程,mongodb,orm,Google)