java mongdodb API增删改查操作
来源:互联网 发布:沙漠靴配什么裤子知乎 编辑:程序博客网 时间:2024/05/16 08:52
源代码:MongoDBTest.java
- 连接数据库
- 代码1之数据库连接
- 总结
- 代码2之连接数据表
- 代码1之数据库连接
- 添加
- 代码3之添加对象到数据库中 insertDBObject obj
- 代码4之添加批量对象到数据库中
- 代码5之添加json对象到数据库中
- 添加总结
- 查询
- 代码6之查询一条数据的对象findOne
- 代码7之分页查询对象findskipxlimitx
- 代码8之范围查询对象findDBObject obj
- 代码9之查询所有的对象find
- 查询总结
- 删除
- 代码10之删除第一个对象removeDBObject obj
- 代码11之删除指定对象removeDBObject obj
- 代码12之删除所有对象removeDBObject obj
- 代码12之删除多条对象removeDBObject obj
- 删除总结
- 修改
- 代码13之修改一条对象updatesearchQuery newDocument
- 代码14之修改多条对象updateMultisearchQuery newDocument
- 修改总结
- 连接数据库
部分代码讲解:
连接数据库
代码1之数据库连接
static{ //连接数据库仓库 mongo = new Mongo(HOST,PORT); //通过数据库仓库连接数据库仓库中的数据库:testDB db = mongo.getDB(DB_NAME); }
解释:
连接数据库仓库概述
mongo = new Mongo(HOST,PORT);
实际生活案例:当想打电话给男友时,首先需要手机有信号,信号就是有服务,可以打通电话,可以发短信。当手机卡坏掉时,无服务,此时无法打电话,无法发短信。此时手机处于无法连接状态。
同理,欲想和数据库进行操作,首先需要和数据库进行连接。而数据库连接的规则是传入HOST,PORT
通过数据库仓库连接数据库仓库中的数据库:testDB
db = mongo.getDB(DB_NAME);
实际生活案例:当手机具备连接条件时,我们就可以打电话了,此时,需要获取男友的手机号码猜可以找到男友
同理:数据库仓库中存在很多数据库,我们想要找到我们想要的数据库,通过代码实现,需要调用getDB(我们想要的数据库)方法。
总结:
通过数据库仓库mongo连接数据库db,再通过数据库db获取到操作的权限,只有dbCollection具有增删改查的权限。
代码2之连接数据表
DBCollection dbCollection = db.getCollection("test");
实际生活案例:当我们有了男友的手机号码时还不够,最关键的是需要点击呼叫,此时电话才能打通。当我们向挂断时,就需要提供挂断的按钮
同理:当我们找到我们想要的数据库还不够,因为我们的增删改查是针对一张表的,所以我们还需要找到此表才可以进行操作。用代码实现通过:db.getCollection(表名)方法。
添加
代码3之添加对象到数据库中 insert(DBObject obj)
搜索:Java MongoDB : Insert a document
public static void addOne1(DBCollection dbCollection){ DBObject dbObject = new BasicDBObject("name","jolie").append("age",45).append("sex","男").append("address", new BasicDBObject("postCode",100000).append("street","南京西路").append("city","上海")); dbCollection.insert(dbObject); }
疑问:
1. BasicDBObject类的put方法与Map的put方法有什么关系?
2.BasicDBObject的append方法(String key, Object val)中的val参数是object类型,怎么运用?
3.BasicDBObject是什么?什么情况下需要用到?
4.dbCollection能添加的对象有哪些类型?
解答1.
BasicDBObject 与 Map是继承关系,BasicDBObject类的put方法是继承自Map的,所以put用法与Map的put方法一样。
解答2.
由于value值是object类型,所以value的类型可以是任意类型,如String,Map,List,自定义User等等。
解答3:
自我理解,BasicDBObject是mongodb中存入对象格式的规范写法。
就是说在mongodb的数据库中存的对象都是Bson结构,因为BasicDBObject继承了类BSONObject和实现了接口Bson,所以mongodb固定了对象的输出格式是Bson格式
并且每个对象都是属于BasicDBObject类的对象。
向mongodb数据库中添加对象也只能添加 BasicDBObject 类型的对象
解答4:
4.dbCollection只能添加DBObject类型的对象,或者关系是:继承自DBObject的集合。
而DBObject是接口,对象的创建只能通过实现类来创建:
<? extends DBObject>
DBObject dbObject = new BasicDBObject()
append put是添加此对象的属性fields,如名字,age等等属性
创建对象的思路:
查看代码,在创建对象时用了三种方法
1. 有参构造函数
2. append方法
3. 参数中再次new BasicDBObject和apend的思路
代码4之添加批量对象到数据库中
public static void addList(DBCollection dbCollection) { //向list中添加三个不同的对象 List<DBObject> list = new ArrayList<DBObject>(); //1. 添加一个对象jolie DBObject obj1 = new BasicDBObject("name","jolie"); list.add(obj1); //2. 添加一个对象Jack,此对象的nickName有多个(思路:可以存储在list中) //重新给dbObject赋值,此时的dbObject引用是指向另一个BasicDBObject类型的对象,和上面创建的对象不再有关系 obj1 = new BasicDBObject(); obj1.put("name","jack"); List<String> listNickName = new ArrayList<String>(); listNickName.add("多多"); listNickName.add("熊猫"); listNickName.add("盼盼"); obj1.put("nickName",listNickName); list.add(obj1); //添加一个对象Tom,指定此对象的爱好有sing song (思路:map/BasicDBObject和list分别指定,本例使用map实现) obj1 = new BasicDBObject(); obj1.put("name","Tom"); Map<String,List<String>> map = new HashMap<String,List<String>>(); List<String> hobbys = new ArrayList<String>(); hobbys.add("sing"); hobbys.add("song"); map.put("爱好",hobbys); obj1.put("hobby",map); list.add(obj1); obj1 = new BasicDBObject(); obj1.put("name", "刘德华"); obj1.put("age", 51); obj1.put("sex", "男"); //put参数中添加的是BasicDBObject,此对象又append obj1.put("remark", new BasicDBObject("address", "南京西路").append("street", "888号")); list.add(obj1); dbCollection.insert(list); }
详解1. 查看DBCollection类添加集合类型的方法:
可以看出,只可以添加List集合,并且集合中存储的对象类型要继承自DBObject。
List list = new ArrayList();
详解2. List包含类DBObject,而类DBObject可以包含List,map
即,向List中添加的DBObject对象,DBObject对象的属性可以有list,map,或者DBObject类型。
DBObject 对应 fields
集合 对应 elements
详解3.
//put参数中添加的是BasicDBObject,此对象又append obj1.put("remark", new BasicDBObject("address", "南京西路").append("street", "888号"));
Map.put(key,Val)返回值为V,
即new BasicDBObject(“address”, “南京西路”)返回值为BasicDBObject,所以可以.append(“street”, “888号”));
详解4.
//重新给dbObject赋值,此时的dbObject引用是指向另一个BasicDBObject类型的对象,和上面创建的对象不再有关系 obj1 = new BasicDBObject(); obj1.put("name","jack");
当obj1 = new BasicDBObject();时,obj1引用指向新的对象,和之前创建的对象没有关系。所以此时获取之前创建的对象的属性时,是获取不到或者获取的值是新创建对象的值。
举例:
public class Test { public static void main(String[] args) { //对String进行测试 String str = "aaa"; str = "bbb"; System.out.println(str); str = new String(); System.out.println(str); System.out.println("......."); //对User进行测试 User u = new User(); u.setName("Jolie"); u = new User(); System.out.println(u.getName()); }}
运行结果:
bbb
(空行,什么也不输出)
……
null
代码5之添加json对象到数据库中
public static void addByJson(DBCollection dbCollection) { String json = "{\"name\" : \"jolie\",\"age\" : 77 ,\"sex\" : \"女\"}"; DBObject dbObject = BasicDBObject.parse(json); dbCollection.insert(dbObject); } public static void addByJson2(DBCollection dbCollection) { String json = "{\"name\" : \"test\",\"age\" : 7 ,\"sex\" : \"女\"}"; DBObject dbObject = (DBObject) JSON.parse(json); dbCollection.insert(dbObject); }
详解5.
解析的方法名一般都是parse,所以无论是通过BasicDBObject还是Json解析,都是调用他们的parse方法
添加总结
添加一个对象:dbCollection.insert(DBObject dbObject);
添加很多对象:dbCollection.insert(List list);
查询
代码6之查询一条数据的对象(findOne)
搜索:Java MongoDB : Query document
public static void queryOne(DBCollection dbCollection) { DBObject dbObject = new BasicDBObject("name", "jolie"); dbCollection.insert(dbObject); DBObject result = dbCollection.findOne(dbObject); System.out.println(result);
详解.
mongodb通过fingOne查询一条记录的对象
代码7之分页查询对象—find().skip(x).limit(x)
public static void queryPage(DBCollection dbCollection) { DBCursor cursor = dbCollection.find().skip(2).limit(3); DBObject obj = null; while (cursor.hasNext()) { obj = cursor.next(); System.out.println(obj); } }
详情: 分页使用dbCollection.find().skip(2).limit(3);
代码8之范围查询对象—find(DBObject obj)
public static void queryRange(DBCollection dbCollection) { addList(dbCollection); DBObject range = new BasicDBObject(); range.put("$gte", 50); range.put("$lte", 52); DBObject obj = new BasicDBObject(); obj.put("age", range); DBCursor dbCursor = dbCollection.find(obj); while (dbCursor.hasNext()) { System.out.println(dbCursor.next()); } }
详情 使用
代码9之查询所有的对象—find()
public static void queryList(DBCollection dbCollection) { //addList(dbCollection); DBObject obj = null; DBCursor cursor = dbCollection.find(); while (cursor.hasNext()) { obj = cursor.next(); System.out.println(obj); } }
详情 通过dbCollection.find();方法
查询总结
dbCollection.find(); 查找所有的对象
dbCollection.find(obj); 查找有条件限制的对象,传入的对象obj一定是DBObject 类型,而obj也已经满足查找的条件,是通过put(key,val)来限制的
dbCollection.find().skip(2).limit(3); 分页查询
dbCollection.findOne(dbObject); 查询一条记录
删除
代码10之删除第一个对象—remove(DBObject obj )
搜索:Java MongoDB : Delete document
public static void deleteFirst(DBCollection dbCollection) { DBObject obj = dbCollection.findOne(); dbCollection.remove(obj); }
详情 先查找到第一个对象:
DBObject obj = dbCollection.findOne();
然后删除查找到的对象
dbCollection.remove(obj);
代码11之删除指定对象—remove(DBObject obj )
public static void deleteOne(DBCollection dbCollection) { //addList(dbCollection); DBObject obj = new BasicDBObject(); ObjectId id = new ObjectId("59cb888e704d333268138155"); obj.put("_id", id); dbCollection.remove(obj); }
详情:
1. 删除指定对象条件:条件必须是具有唯一性的
2. BasicDBObject(String key, Object value) 指定key是String类型,而不是任意类型,所以DBObject.put(key,val)时,key绝对是String类型
3. Object value 没有指定是哪种类型,然后从mongodb数据库中可以看出,value的类型是Type显示的那一栏。ObjectId与Object是不同的概念,所以,当指定 通过id删除对象时,先new一个ObjectId来指定此id的值
4. 思路:先找到指定对象,然后再删除
代码12之删除所有对象—remove(DBObject obj )
public static void deleteAll(DBCollection dbCollection) { //addList(dbCollection); DBCursor dbCursor = dbCollection.find(); while (dbCursor.hasNext()) { dbCollection.remove(dbCursor.next()); } }
详情:
1. 思路: find()查找出所有的对象,竟而一个一个的删除
代码12之删除多条对象—remove(DBObject obj )
public static void deleteByIn(DBCollection dbCollection) { addList(dbCollection); DBObject obj = new BasicDBObject(); List<String> list = new ArrayList<String>(); list.add("刘德华"); list.add("jolie"); obj.put("name", new BasicDBObject("$in", list)); dbCollection.remove(obj); }
详情:
思路: 先列出需要删除对象的条件是,name为jolie和刘德华,然后删除
删除总结
由于mongdb中存储的是DBObject类型的对象,所以只能删除DBObject此类型对象。
因为remove(DBObject obj)参数是DBObject类型。而传入的obj就是要删除的对象,而此对象已经满足想要删除的条件是什么,它是通过put(key,val)来指定的
修改
搜索:Java MongoDB : Update document
代码13之修改一条对象—update(searchQuery, newDocument);
//第一种修改方法 addList(dbCollection); DBObject newDocument = new BasicDBObject(); newDocument.put("$set", new BasicDBObject("age", 110)); DBObject searchQuery = new BasicDBObject(); searchQuery.put("name", "刘德华"); dbCollection.update(searchQuery, newDocument); }//第二种修改方法 public static void updateOne2(DBCollection dbCollection) { addList(dbCollection); DBObject newObj = dbCollection.findOne(new BasicDBObject("_id", new ObjectId("59c252a5704d3387d4c9bcf3"))); newObj.put("name", "aaa"); DBObject searchObj = dbCollection.findOne(new BasicDBObject("_id", new ObjectId("59c252a5704d3387d4c9bcf3"))); dbCollection.update(searchObj, newObj); }
详情
第一种通过$set来辨别是修改的操作
第二种通过put来实现
代码14之修改多条对象—updateMulti(searchQuery, newDocument);
public static void updateMulti(DBCollection dbCollection) { DBObject newDocument = new BasicDBObject(); newDocument.put("$set", new BasicDBObject("name", "刘德华")); DBObject searchQuery = new BasicDBObject(); searchQuery.put("name", "asdf"); dbCollection.updateMulti(searchQuery, newDocument); }
修改总结
dbCollection.update(searchObj, newObj); 修改一条
dbCollection.updateMulti(searchQuery, newDocument); 修改多条
- java mongdodb API增删改查操作
- 利用HDFS java API增删改查操作
- 利用HDFS java API增删改查操作(转载)
- HBase基本API(java)操作(增删改查)
- HBase基本API(java)操作(增删改查)
- HBase基本API(java)操作(增删改查)
- Java API连接HBase 进行增删查改操作
- hbase 增删改查 api 简单操作
- ElasticSearch入门-增删改查(java api)
- mongdb java api 增删改查
- JAVA数据库基本操作,增删改查
- java操作mysql的增删改查
- java操作mysql的增删改查
- java操作mysql的增删改查
- java操作mysql增删改查
- 【完善】Java操作MySql增删改查
- Java 操作MongoDb 增删改查
- JAVA操作Redis增删改查
- Java加密部署,使用自定义的classloader解密的方法实例
- 在Ubuntu中添加中文man包
- 字典树应用
- ffmpeg SDL2.0播放音频
- 动态规划:从新手到专家
- java mongdodb API增删改查操作
- 浅谈Linux用户权限管理之一(用户与组的概念)
- ListView的优化(一)
- Android图形处理--PorterDuff.Mode那些事儿
- STM32 变量存储问题描述
- React事件系统入门
- 3.Textview和Button的使用:点击按钮,返回点击次数
- 手机升级到Android 7.0后,打开Android Device Monitor(DDMS)后,File Explorer中显示一片空白。
- 【软件工程导论作业】可行性研究