mongo在java中的增删改查操作.docx
- 文档编号:27265405
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:6
- 大小:17.83KB
mongo在java中的增删改查操作.docx
《mongo在java中的增删改查操作.docx》由会员分享,可在线阅读,更多相关《mongo在java中的增删改查操作.docx(6页珍藏版)》请在冰豆网上搜索。
mongo在java中的增删改查操作
mongo在java中的增删改查操作
看了网上好多的代码啊,真心看着乱乱乱啊,都没心情看了,自己整理了一下,请笑纳吧
备注个官网上增删改查命令的网址吧,英文的http:
//docs.mongodb.org/manual/reference/crud/先给大家看下我导入的包包吧
[java]viewplaincopyimport.UnknownHostException;importorg.bson.types.ObjectId;importorg.junit.Test;importcom.mongodb.BasicDBObject;importcom.mongodb.DB;importcom.mongodb.DBCollection;importcom.mongodb.DBCursor;importcom.mongodb.DBObject;importcom.mongodb.Mongo;
一、首先与数据库连接获取集合的操作
[java]viewplaincopy//创建Mongo对象Mongomongo=newMongo("localhost",27017);//连接名为tom的数据库,如果不存在则创建DBmyDB=mongo.getDB("tom");//从该数据库中获取名为mycollection的数据集合,如果不存在则创建collectionDBCollectioncollection=myDB.getCollection("myCollection");
那那,之后的所有操作都是要借助这个collection(也可以换成其他的名字的)的哦。
所以果断的封装了这段代码
[java]viewplaincopy/***获取collection*@throwsUnknownHostException**/publicDBCollectiongetCollection(){Mongomongo;try{mongo=newMongo("localhost",27017);//连接名为tom的数据库,如果不存在则创建DBmyDB=mongo.getDB("tom");//从该数据库中获取名为mycollection的数据集合,如果不存在则创建collectionDBCollectioncollection=myDB.getCollection("myCollection");returncollection;}catch(UnknownHostExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();returnnull;}}
为了方便使用这个集合collection,我直接弄了个全局变量
[java]viewplaincopypublicDBCollectioncollection=getCollection();
开始增删改查了~~
二、增加操作[java]viewplaincopy/***插入数据操作**/publicintinsertAction(longuserId,Stringname,intage,Stringmessage){//创建存放数据的对象(或者是容器吧)DBObjectdocument=newBasicDBObject();//这里存放的数据类型有好多,也可以是BasicDBObject类型的document.put("name",name);document.put("age",age);document.put("userId",userId);//存放的类型是List<Map>List<Map>list=newArrayList<Map>();Map<String,Object>map=newHashMap<String,Object>();map.put("message",message);list.add(map);document.put("message",list);//到此要存放的对象我就鼓捣好了,你也可以继续弄的//请看插入//可以不加那额getN()的,加上就是返回该操作影响到的记录行数,其他的操作也可以加上这个的,效果一样returncollection.insert(document).getN();//还可以添加多条记录,还可以是List<DBObject>类型的//collection.insert(document,document,document);//collection.insert(List<DBObject>);}其实还有一个插入操作是save(DBObject),这个方法和insert的用法一样,但是效果不同,insert的记录如果在数据库中存在则不作为,只有当记录不存在时才插入。
而save如果发现要插入的数据已存在则更新该记录,不存在时就插入该记录。
三、查询操作
1、查询所有的记录
[java]viewplaincopypublicvoidsearchAll(){DBCursorcur=collection.find();while(cur.hasNext()){DBObjectobj=cur.next();System.out.println("---"+obj);}}2、根据_id查询用户(额,这个_id貌似是每个记录都有且唯一的,由于和根据其他属性查询有点不一样,所以单个列出来了,当然,我理解的有可能不对,等我查查再补充上)。
看代码
[java]viewplaincopycollection.findOne(newBasicDBObject("_id",newObjectId("53e18de6d294b5581f38178d")))findOne是查询出一条记录,find是查询出所有符合条件的记录
3、根据用户名字查询记录
[java]viewplaincopy/***按照name查找用户信息**/publicBasicDBObjectsearchById(Stringname){BasicDBObjectobj=(BasicDBObject)collection.findOne(newBasicDBObject("name",name));returnobj;}这里我强行的只要了一个记录,其实完全有可能是重名啊对不对,反正我就这么写了,你也可以把返回的类型改成DBCursor,把findOne改成find遍历游标去吧
4、根据年龄有范围的查询~~,这个我喜欢,请注意不一样的地方
[java]viewplaincopy/***查询年龄大于Myage的用户*/publicvoidsearchByage(intMyage){DBCursorcur=collection.find(newBasicDBObject("age",newBasicDBObject("$gt",Myage)));while(cur.hasNext()){BasicDBObjecttem=(BasicDBObject)cur.next();System.out.println(tem);}}
吐槽下:
每次干个查询啊删除啊之类的总要先new个BasicDBObject,你说烦人不,
看上面的写法吧,好好看看啊$gt就是大于的意思。
之后的按条件删除也可以这么用的
看下所有的条件吧
条件操作符
$gt:
>
$lt:
<
$gte:
>=
$lte:
<=
$ne:
!
=、<>
$in:
in
$nin:
notin
$all:
all
$not:
反匹配(1.3.3及以上版本)四、更新操作。
这个有个update函数,还有个findAndModify,这两个都是更新,后面的是查找并更新,上面的官网里没有这个呢。
*********************************************************************************************************************************************************
db.COLLECTION_NAME.update({},{},true|false,true|false);
第一个参数是查询选择器,与findOne的参数一样,相当于sql的where子句
第二个参数是更新操作文件,由各种更新操作符和更新值构成,
第三个参数是upsert。
如果是true,表示如果没有符合查询选择器的文档,mongo将会综合第一第二个参数向集合插入一个新的文档。
第四个参数是multi。
true:
更新匹配到的所有文档,false:
更新匹配到的第一个文档,默认值
第三第四个参数也可以合并成一个:
db.COLLECTION_NAME.update({},{},{multi:
true|false,upsert:
true|false});
拥有类似事务特性的更新与查询操作——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表示删除符合query条件的文档,不能与update同时出现
new为true:
返回个性后的文档,false:
返回个性前的,默认是false
sort:
排序条件,与sort函数的参数一致。
fields:
投影操作,与find*的第二个参数一致。
upsert:
与update的upsert参数一样。
不论是update的第二个参数,还是findAndModify的update,在不指定更新操作符的情况下,将会用指定的新值替换旧值。
*******************************************************************************************************************************************
以上是网上粘来的,可以看看,我写的是最简单的方法,没有用到后面的两个参数
请看代码
[java]viewplaincopycollection.findAndModify(newBasicDBObject("name","tom"),newBasicDBObject("age",23));
上面代码的后果是把那条名字是tom的记录直接换成了一个只有一个age属性为23的记录了,名字神马的都没有了,所以换的时候注意下后面那参数啊
[java]viewplaincopy/***更新操作*/publicvoidupdateAction(longuserId,Stringmessage){DBObjectold=searchById(userId);//这个方法是我自己写的,根据userId查找记录Listlist=(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("userId",userId),old);}
上面的样子就可以只更改message字段了,当然还可以用下面的语句
[java]viewplaincopycollection.update(newBasicDBObject("userId",userId),old);
我发现个问题就是这两个方法使用的时候第一个参数必须在那个括号里new放到外面new好再放到括号里就不可以了比如下面的样子就不行
[java]viewplaincopyBasicDBObjectobj=newBasicDBObject("userId",userId);collection.update(obj,old);
上面的样子就不可以更新了,我也不知道为什么。
。
。
。
五、删除操作~~
该操作同样有个remove和findAndremove估计意思和上面差不多吧,看代码
[java]viewplaincopy<prename="code"class="java">/***删除操作*/publicvoiddelById(){//根据_id删除//System.out.print(collection.remove(newBasicDBObject("_id",newObjectId("53e18de6d294b5581f38178d"))).getN());//这样也可以找到,就是new不new的那个话题。
乱啊BasicDBObjecta=newBasicDBObject("name","花了");System.out.println(collection.findOne(a));//根据姓名删除(getN返回影响的行数)System.out.print(collection.remove(newBasicDBObject("name","王五")).getN());//删除年龄大于20的用户信息//System.out.print(collection.remove(newBasicDBObject("age",newBasicDBObject("$gte",20))).getN());}好吧,慢慢再更新吧,这个只是最基本的操作,看着不知道舒服点不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mongo java 中的 增删 操作