mongo在java中的增删改查操作_第1页
mongo在java中的增删改查操作_第2页
mongo在java中的增删改查操作_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、mongo 在 java 中的增删改查操作看了网上好多的代码啊,真心看着乱乱乱啊,都没心情看了,自己整理了一下,请笑纳吧备注个官网上增删改查命令的网址吧,英文的/manual/reference/crud/ 先给大家看下我导入的包包吧java view plaincopyimport .UnknownHostException;import org.bson.types.ObjectId;import org.junit.Test;import com.mongodb.BasicDBObject; import com.mongodb.DB; imp

2、ort com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.Mongo;一、首先与数据库连接获取集合的操作java view plaincopy/创建 Mongo 对象Mongo mongo=new Mongo("localhost", 27017);/连接名为tom的数据库,如果不存在则创建DB myDB = mongo.getDB("tom");/从该数据库中获取名为mycollection的数据集

3、合,如果不存在则创建collectionDBCollection collection= myDB.getCollection("myCollection");那那,之后的所有操作都是要借助这个collection (也可以换成其他的名字的)的哦。所以果断的封装了这段代码java view plaincopy/*获取 collection*throws UnknownHostException* */publicDBCollection getCollection() Mongo mongo;try mongo = new Mongo("localhost&quo

4、t;, 27017);/连接名为 tom 的数据库 ,如果不存在则创建DB myDB = mongo.getDB("tom");/从该数据库中获取名为mycollection 的数据集合,如果不存在则创建 collectionDBCollection collection= myDB.getCollection("myCollection");return collection; catch (UnknownHostException e)/ TODO Auto-generated catch blocke.printStackTrace();retur

5、nnull;为了方便使用这个集合collection,我直接弄了个全局变量java view plaincopypublic DBCollection collection=getCollection();开始增删改查了二、增加操作 java view plaincopy/* 插入数据操作* */public int insertAction(long userId,String name,intage,String message)/创建存放数据的对象(或者是容器吧)DBObject document= new BasicDBObject();/这里存放的数据类型有好多,也可以是BasicD

6、BObject 类型的document.put("name",name);document.put("age", age);document.put("userId",userId);/存放的类型是List<Map>List<Map> list=new ArrayList<Map>();Map<String,Object> map=newHashMap<String,Object>();map.p

7、ut("message", message);list.add(map);document.put("message",list);/ 到此要存放的对象我就鼓捣好了,你也可以继续弄的/请看插入/ 可以不加那额getN()的,加上就是返回该操作影响到的记录行数,其他的操作也可以加上这个的,效果一样returncollection.insert(document).getN();/还可以添加多条记录,还可以是List<DBObject>类型的/collection.insert(document,document,document

8、);/collection.insert(List<DBObject>);其实还有一个插入操作是save(DBObject), 这个方法和insert的用法一样,但是效果不同,insert 的记录如果在数据库中存在则不作为, 只有当记录不存在时才插入。而 save 如果发现要插入的数据已存在则更新该记录,不存在时就插入该记录。三、查询操作1、查询所有的记录java view plaincopypublic voidsearchAll()DBCursor cur=collection.find();while(cur.hasNext()DBObject obj=cur

9、.next();System.out.println("-"+obj);2、根据_id 查询用户(额,这个_id 貌似是每个记录都有且唯一的,由于和根据其他属性查询有点不一样,所以单个列出来了,当然,我理解的有可能不对,等我查查再补充上) 。看代码java view plaincopycollection.findOne(newBasicDBObject("_id",newObjectId("53e18de6d294b5581f38178d")findOne 是查询出一条记录, find 是查询出所有符合条件的记录3、根据用户名字查询

10、记录java view plaincopy/* *按照 name 查找用户信息* */public BasicDBObject searchById(Stringname)BasicDBObjectobj=(BasicDBObject)collection.findOne(newBasicDBObject("name",name);return obj;这里我强行的只要了一个记录,其实完全有可能是重名啊对不对,反正我就这么写了,你也可以把返回的类型改成DBCursor, 把findOne 改成 find 遍历游标去吧4、根据年龄有范围的查询,这个我喜欢,请注意不一样的地方j

11、ava view plaincopy/* 查询年龄大于Myage 的用户*/public void searchByage(intMyage)DBCursor cur=collection.find(newBasicDBObject("age",new BasicDBObject("$gt",Myage);while(cur.hasNext()BasicDBObjecttem=(BasicDBObject)cur.next();System.out.println(tem);吐槽下:每次干个查询啊删除啊之类的总要先new 个BasicDBObject,你

12、说烦人不,看上面的写法吧,好好看看啊$gt 就是大于的意思。之后的按条件删除也可以这么用的看下所有的条件吧条件操作符$gt : >$lt : <$gte: >=$lte: <=$ne : != 、<>$in : in$nin: not in$all: all$not: 反匹配 (1.3.3 及以上版本 )四、更新操作。这个有个 update 函数,还有个 findAndModify,这两个都是更新,后面的是查找并更新,上面的官网里没有这个呢。*db.COLLECTION_NAME.update(,true|fa

13、lse,true|false);第一个参数是查询选择器,与findOne 的参数一样,相当于sql 的 where 子句第二个参数是更新操作文件,由各种更新操作符和更新值构成,第三个参数是 upsert。如果是 true,表示如果没有符合查询选择器的文档, mongo 将会综合第一第二个参数向集合插入一个新的文档。第四个参数是 multi 。true:更新匹配到的所有文档, false:更新匹配到的第一个文档,默认值第三第四个参数也可以合并成一个:db.COLLECTION_NAME.update(,multi:true|false,upsert:true|false);拥有类似事务特性的更新

14、与查询操作findAndModify.非常奇怪的是,在上面的链接里面没有找到这个函数的定义。它是原子性的,会返回符合查询条件的更新后的文档。一次最多只更新一个文档,也就是条件query 条件,且执行sort 后的第一个文档。db.COLLECTION_NAME.findAndModify(query:,update:,remove:true|false,new:true|false,sort:,fields:,upsert:true|false);query 是查询选择器,与findOne 的查询选择器相同update 是要更新的值,不能与remove 同时出现remove 表示删除符合que

15、ry 条件的文档, 不能与 update 同时出现new 为 true:返回个性后的文档,false:返回个性前的,默认是 falsesort:排序条件,与sort 函数的参数一致。fields: 投影操作,与find* 的第二个参数一致。upsert:与 update 的 upsert 参数一样。不论是 update 的第二个参数, 还是 findAndModify的 update,在不指定更新操作符的情况下,将会用指定的新值替换旧值。*以上是网上粘来的,可以看看,我写的是最简单的方法,没有用到后面的两个参数请看代码java view plaincopycollection.findAndM

16、odify(newBasicDBObject("name","tom"),new BasicDBObject("age",23);上面代码的后果是把那条名字是tom 的记录直接换成了一个只有一个 age 属性为 23 的记录了,名字神马的都没有了,所以换的时候注意下后面那参数啊java view plaincopy/*更新操作 */publicvoid updateAction(long userId,Stringmessage)DBObject old = searchById(userId);/个方法是我自己写的,根据userId

17、 查找记录List list=(List)old.get("message");System.out.println("*"+list);Map<String,Object> map=newHashMap<String,Object>();map.put("message", message);list.add(map);old.put("message", list);collection.findAndModify(newBasicDBObject(&qu

18、ot;userId",userId),old);这上面的样子就可以只更改message字段了,当然还可以用下面的语句java view plaincopycollection.update(newBasicDBObject("userId",userId),old);我发现个问题就是这两个方法使用的时候第一个参数必须在那个括号里new 放到外面 new 好再放到括号里就不可以了比如下面的样子就不行java view plaincopyBasicDBObject obj=newBasicDBObject("userId",userId);collection.update(obj,old);上面的样子就不可以更新了,我也不知道为什么。五、删除操作 该操作同样有个 remove 和 findAndremove 估计意思和上面差不多吧,看代码java view plaincopy<pre name="code

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论