`
allwefantasy
  • 浏览: 46845 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MongoDB ODM 框架MongoMongo-简化你的数据存储

阅读更多

MongMongo是一个用Java写的ODM框架,使得对MongoDB的操作更加便捷。

 

MongoMongo努力为Java开发者提供类似于ActiveORM 或者 Hibernate的操作API,并且保留了MongoDB的schemaless,document-based 设计,动态查询,原子修改操作等特性。当然你可以很方便的绕开MongoMongo而使用Java Driver 原生提供的功能。

 

下面是一段示例代码:

 

 

public class Blog extends Document {
    static {
        storeIn("blogs");                
        hasManyEmbedded("articles", new Options(map(
                Options.n_kclass, Article.class
        )));
        //create index
        index(map("blogTitle", -1), map(unique,true));
        //validate uerName field
        validate("userName",map(length,map(
                minimum,5
        )));

    }
    //association related
    public AssociationEmbedded articles() {throw new AutoGeneration();}
    private String userName;
    private String blogTitle;
}

public class Article extends Document {
    static {        
        belongsToEmbedded("blog", new Options(map(
                Options.n_kclass, Blog.class
        )));
    }
    public AssociationEmbedded blog() {throw new AutoGeneration();}
    private String title;
    private String body;
}

public class Usage{
  public static void main(String[] args){

     Blog blog = Blog.where(map("userName","sexy java")).in(map("id",list(1,2,3))).singleFetch();
     blog.articles().build(map("title","i am title","body","i am body"));
     blog.save();
  }

}

 

 我们可以看到这是一个典型的充血模型。关联,存储,创建索引,设置别名等操作都简单的在static 块中调用一个函数即可实现。如果你用一些动态语言,你会发现这种方法级声明语法是非常流行,写起来也非常舒服。

 

其实对于MongoDB相关的框架已经有很多,那么MongoMongo的优势何在?我们简单做个代码对比就一目了然了。

 

以 SpringData for MongoDB为例,典型的操作如下:

 

 public static void main( String[] args )
    {
        MongoOperations mongoOps = new MongoTemplate(new Mongo(), "mydb");
        Person person = new Person();
        person.setName("Joe");
        person.setAge(10);
        mongoOps.insert(person);
        log.info(mongoOps.findOne(new Query(Criteria.where("name").is("Joe")), Person.class));
    }

 

 

 

事实上大部分Java ODM都是如此操作Model的。为了构造查询串引入Criteria对象,为了进行查询引入Query对象,查询时还要申明Person对象等。

此外对于索引,别名,校验等设置也较为繁琐和不清晰,通常将将这些信息放在字段的Annotation上,或者设置一些Configuration对象等。

而MongoMongo将大部分对collection的配置都放在Model的代码块中,清晰明了,且便于管理。

 

相应的MongoMongo代码

 

public static void main( String[] args )
 {
     Person person =  Person.create(map("name","Joe","age",34));
     person.save();
     log.info(Person.where(map("name","Joe")).singleFetch()); 
 }

 

 

 

MongoMongo的查询也是典型的ORM的操作方式。

 

Blog blog = Blog.where(map("active",true)).in(map("id",list(1,2,3))).singleFetch();

 

通常你还可以写成:

public class Blog extends Document {
   public Criteria active(){
    return where(map("active",true));
   } 
}

 

之后你就可以这样调用:

List<Blog> blogs = Blog.active().where(map("userName","jack")).fetch();

 

复用性是很高的。

如果你使用过 ActiveORM,那么这样操作MongoDB 你会感觉很顺手。

MongoMongo目前在一些内部小项目中使用。根据需求定制的,所以相对来说没有 ActiveORM 完善,很多细节和功能没有考虑到,但是都可以通过其暴露的MongoDB Driver 解决。

 

举个例子:

 

TTUser.collection().find(new BasicDBObject("tagName","cool"));

 

这个时候你尅通过collection()方法获得DBCollection对象。

 

当然也希望以后能遇到一个复杂的项目,从而能在该项目中完善MongoMongo.

如果你将它用在自己的项目中,我想肯定能节约相当多的代码。

 

大家不妨根据 5 steps to run a application on MongoMongo  体验下。

 

 

 

 

 

 

分享到:
评论

相关推荐

    jag-express-mongo-mvc-v2:Express Mongo示例应用程序

    【标题】"jag-express-mongo-mvc-v2:Express Mongo示例应用程序"是一个基于JavaScript的Web开发项目,它展示了如何使用Express框架与MongoDB数据库构建一个模型-视图-控制器(MVC)架构的应用程序。这个项目可能是...

    spring-data-mongodb1.2.0

    总的来说,Spring Data MongoDB 1.2.0.RELEASE是Spring框架与MongoDB数据库之间的一个强大桥梁,它简化了数据访问层的实现,提高了开发效率,并提供了丰富的功能来满足各种数据操作需求。无论你是构建简单的单体应用...

    node-mongo-registration-login-api

    4. **Mongoose**:在Node.js中操作MongoDB的ODM(Object Document Mapping)库,它提供了强大的数据模型和查询构建器,使得在JavaScript中与MongoDB交互更加简单。 5. **用户注册**:API应该包含创建新用户账户的...

    node-express-mongo-api-user-register

    标题“node-express-mongo-api-user-register”表明这是一个基于Node.js、Express框架和MongoDB数据库构建的用户注册API项目。这个API主要用于处理用户的注册请求,可能包括验证用户输入、存储用户信息到数据库等...

    Ruby-MongoModel针对MongoDB的RubyORM框架兼容Rails3

    MongoModel是针对MongoDB数据库的Ruby对象数据映射(ORM)框架,专为简化Ruby开发者与NoSQL数据库MongoDB之间的交互而设计。它提供了一种面向对象的方式来操作数据,类似于传统的关系型数据库中的ActiveRecord。...

    Spring+SpringMVC+MongoDB应用

    标题中的“Spring+SpringMVC+MongoDB应用”是指一个集成使用了Spring框架、SpringMVC模块以及MongoDB数据库的项目。这个项目旨在利用这些技术栈来构建一个现代的、基于Java的Web应用程序。 首先,Spring是Java领域...

    MongoDB权威指南中文版

    此外,它还支持ODM(对象文档映射)工具,简化数据操作。 通过阅读《MongoDB权威指南中文版》,读者将全面了解MongoDB的基础知识、高级特性以及实际应用案例,为开发高效、可靠的分布式应用程序打下坚实基础。无论...

    mongo-blog:使用Flask,MongoEngine和MongoDB构建的简单博客应用程序

    MongoEngine是Python的一个ODM(Object-Document Mapping)库,它是MongoDB的驱动程序,用于简化对MongoDB数据库的操作。通过MongoEngine,开发者可以使用Python对象来代表数据库文档,使得数据操作更加直观和方便。...

    MongoDB权威指南.pdf

    2. **聚合框架**: MongoDB提供了强大的聚合框架,类似于SQL的GROUP BY,可以进行数据汇总、过滤和转换。 3. **复制集**: 通过复制集实现数据冗余,提高可用性和容错性。一个复制集由多个成员组成,数据自动同步。 4....

    node-express-mongo-api:带有Node.js,Express和MongoDB的REST API的入门项目

    Mongoose是连接Node.js和MongoDB的ODM(对象数据模型)库,它提供了数据模型定义和操作数据的接口。Mongoose使得与MongoDB数据库的交互变得更加简单,可以处理验证、类型转换、查询构建等功能。 **ES6(ECMAScript ...

    express-mongo-app

    3. **Mongoose库**:在Node.js中,通常使用Mongoose作为MongoDB的ODM(对象数据模型)库,它提供了模型和集合之间的映射,简化了数据操作。Mongoose允许定义数据模型,进行数据验证,并提供了丰富的查询API。 在...

    tp5(thinkPHP5)操作mongoDB数据库的方法

    在实际的开发中,除了直接使用php-driver外,tp5还支持使用ODM(Object Document Mapping,对象文档映射)工具,如Laravel框架中的Eloquent ORM相似的MongoDB ODM,来进一步简化数据操作。ODM通常会提供更加丰富的...

    Ruby-MongoMapper针对Mongo的一个Ruby对象映射器

    Ruby的MongoMapper库就是为了让开发者能够更自然地在Ruby对象和MongoDB文档之间进行映射,从而简化数据操作。 MongoMapper的设计理念深受ActiveRecord的影响,它是Ruby on Rails框架中的核心组件,但MongoMapper...

    node-express-mongo-API

    Mongoose 提供了一个强大的对象数据模型(ODM),简化了数据操作和验证。 **API 设计** 构建 RESTful API 遵循一组原则,确保接口清晰、一致且易于使用。通常,API 使用 HTTP 方法(GET、POST、PUT、DELETE)来表示...

    JSON-With-Mongo-Persistence:使用 Mongo Persistence Layer 创建一个 JSON api 并让它在 Heroku 上运行

    JSON 和 MongoDB 在现代 Web 开发中的应用非常广泛,它们提供了高效的数据存储和交换方式。本项目 "JSON-With-Mongo-Persistence" 涉及到如何使用 MongoDB 的持久化层创建一个 JSON API,并将其部署到 Heroku 云平台...

    Typescript-Express-Mongo-Example:使用 typescript 构建 express api 的简单起点

    开发者将使用Mongoose库(一个MongoDB的对象数据模型ODM),它为TypeScript提供了类型安全的接口,使得操作数据库更加方便。 **Mongoose** Mongoose是Node.js中用于MongoDB的库,它提供了一种将数据模型化的机制。...

    morphia所用到的jar包

    Morphia-0.99.jar则是构建在MongoDB Java驱动程序之上的ODM框架,它的目标是将Java对象映射到MongoDB的文档结构上,使得开发人员可以使用面向对象的方式来处理数据,而不是直接操作JSON文档。Morphia提供了一种简单...

    fullstack-react-node-express-mongo-boilerplater:我的项目的样板代码设置

    在Node.js环境中,通常会使用Mongoose这样的ODM(对象数据映射)库来与MongoDB进行交互,使得数据操作更加方便。 在描述中提到的"将dev.js文件添加到您的配置文件夹",指的是项目中的开发环境配置文件。这个文件...

    spring MVC morphia mongo 整合的例子

    在这个"spring MVC morphia mongo 整合的例子"中,你将看到如何将这三个组件集成到一起,创建一个能够利用MongoDB存储数据,并通过Spring MVC处理HTTP请求的Web应用。以下是一些关键知识点: 1. **Spring MVC**:...

    C#MongoDB-具有通用CRUD的多态集合

    7. **面向对象映射(Object-Document Mapping, ODM)**: 在C#中,通常会使用如MongoDB.Driver的ODM框架,如Mongocsharpdriver,它能将对象模型自动映射到MongoDB的文档结构,简化了数据操作。 8. **设计模式**: 在...

Global site tag (gtag.js) - Google Analytics