在 java,可能是最好用的 mongodb 操作工具

3,139 阅读3分钟
原文链接: www.cybermkd.com

因为自己工作中会需要用到MongoDB,为了在JAVA上用MongoDB用得更舒服,所以开发了这个工具。

相较于之前的版本,几乎重写所有代码。

具有以下特性:

  • 使用方式更像是自然语言,用起来更舒适。
  • 简化mongodb java driver 的操作,降低学习成本。
  • 支持连接mongodb副本集。
  • 内置JFinal和Resty插件。(基于最新版的JFinal和Resty)
  • 基于最新版的的mongodb java driver驱动。

如有疑问可加群:[email protected]

项目地址:github.com/T-baby/Mong…

初始化

结合JFinal

在configPlugin中加载

MongoJFinalPlugin jFinalPlugin = new MongoJFinalPlugin("test", "localhost:27017");
me.add(jFinalPlugin);

结合Resty

在configPlugin中加载

MongoRestyPlugin mongoRestyPlugin = new MongoRestyPlugin("database名", "localhost:27017");
pluginLoader.add(mongoRestyPlugin);

单独使用

MongoClientURI connectionString = new MongoClientURI("localhost:27017");
MongoClient client = new MongoClient(connectionString);
MongoKit.init(client, "database名");

连接副本集

只需要在connectionString后直接增加地址就行

MongoClientURI connectionString = new MongoClientURI("localhost:27017","localhost:27018","localhost:27019");

所有操作都基于MongoQuery,如果是查找条件等等默认使用and连接,如果需要使用or,可以直接继承MongoKit和MongoQuery、对应的插件增加相应的方法。

每个操作前请先初始化一个MongoQuery对象,这个对象不同操作是不可以复用的。

MongoQuery query=new MongoQuery();

下文的query一律指MongoQuery对象。

ps:所有操作都是批量的,所以建议在修改、删除时使用不重复的key或者尽可能详细指定。

query.use("集合名")
,使用来指定集合。

查找会基于fastjson返回一个格式化好的json list,更新、删除、插入都会返回影响的行数。

query.use("集合名").set("key", "value").save()

多个key和value只要直接在后面增加set即可。

query.use("集合名").set("key", "value").set("key2", "value2").save()

批量插入

使用add来增加,然后使用saveList来保存。

query.use("item").add(new MongoQuery().set("a", "1").set("b", "2")).add(new MongoQuery().set("a", "1").set("b", "3")).saveList();

根据ID操作

MongoQuery支持通过ID来查找、更新、插入。

为了大家方便,已经自带了一个byId方法。查找、更新、删除都可以接这个方法。如下面根据ID查找:

query.use("item").byId("5710a81ab73a87092e17a02b").find()

查找所有

query.use("item").findAll()

根据条件查找

query.use("item").eq("b","2").find()

(ps:MongoDB区分文本和数字,设定条件时要注意)

在use后面接着的就是条件,支持以下条件:

  • eq() 等于
  • ne() 不等于
  • gt() 大于
  • lt() 小于
  • gte() 大于等于
  • lte() 小于等于
  • like() 模糊查找,like除了支持含有,还支持以什么开头或以什么结尾的查找。
  • like(int type,String key, String value) 1为以什么开头,除了1以外的数字都是以什么结尾。
  • 如果还需要更多的条件,可以通过query.filter()来加载原生条件,如: query.filter(Filters.in(key, value)),这里的filter是mongodb驱动自带的,想要知道更多条件可以到mongodb.github.io/mongo-java-…

所有的条件都是默认以and连接,所以可以接多个条件,更新、查找、删除都是使用这种方式,比如我要查找一个年龄小于18岁名字中含有“陈”这个字的男生。

query.lt("age",18).eq("sex","man").like("name","陈").find()

排序和数量

find是支持排序和数量的,下面有两个例子。

query.lt("age",18).find(排序条件)

query.lt("age",18).find(排序条件,结果数量)

排序条件要求使用原生驱动的写法,详情见mongodb.github.io/mongo-java-…

更新操作的话直接在条件后追加modify即可,更新多个就追加多个。

query.use("item").byId("5710a81ab73a87092e17a02b").modify("b","3").update()

query.use("item").eq("a","1").modify("b","3").update()

query.use("item").eq("a","1").modify("a","2").modify("b","3").update()

更新操作默认是批量的,所以会更新满足条件的所有行,建议至少使用一个唯一字段或者是详细的条件。

删除更查找基本一致,指定条件后直接加delete()即可。

query.use("item").byId("5710a81ab73a87092e17a02b").delete()query.use("item").eq("test","2").delete()