MongoDB使用二
一、数据可视化
1、RoboMongo
RoboMongo : 是一款专为MongoDB数据库设计开发的可视化管理工具,
Robomongo是一个基于Shell的跨平台开源MongoDB 管理工具。嵌入了
JavaScript 引擎和 MongoDB mogo。只要你会使用mongo shell,你就
会使用Robomongo。提供语法高亮、自动完成、差别视图等。
2、MongoDB的增删改查
1.robomongo这个软件采用的js的引擎所以当保存的shell脚步
的时候会以.js文件形式呈现
2.mongodb形式的数据不要过分的期望能像mysql这样的关系型
数据库那样规规矩矩的
3.mongodb中的增删改查还是update,delete,insert,find
只是都以函数的形式呈现的
4.mongodb的增删改查的具体代码:
db.getCollection('Student').find({})
/*添加:通过容器找到Student文档间接添加*/
db.getCollection('Student').insert(
{_id:'001',name:'欧阳克',age:48}
)
/*添加:直接在Student文档中添加一条数据*/
db.Student.insert(
{_id:'002',name:'黄蓉',age:48}
)
/*添加:直接在Student文档中添加一条数据,但是有日期类型*/
db.Student.insert(
{_id:'003',name:'柯镇恶',age:120,birthday:ISODate('1997-07-08')}
)
//备注:如果插入的是日期类型的数据,需要使用到MongoDB内置的函数ISODate(),
//但是必须要严格按照位置补全
db.Student.insert(
{_id:'004',name:'查良庸',age:120,birthday:ISODate('1924-03-10')}
)
/*添加:直接在Student文档中添加多条数据*/
stu01={_id:'005',name:'陈旋风',age:28}
stu02={_id:'006',name:'冯默风',age:56}
stu03={_id:'007',name:'陆乘风',age:52}
db.Student.insertMany(
[stu01 ,stu02, stu03]
)
/*查询:通过Student文档查询全部*/
db.Student.find();
//-------------------------------------2.修改-------------------------------------
//2.1对文档进行修改的语法
/*###基本语法:db.collection.update(
<query>, //query: 类型为:document文档类型;要修改哪些的查询条件,
//类似于SQL 的 where
<update>, //update: 类型为:document文档类型;要修改的字段对应的值,
//详情可以见例子【2.1.1】
upsert:<boolean>, //upsert: 类型为:boolean类型; 可选的,默认值是false。
//如果根据查询条件没找到对应的文档,如果设置为true,相当于执行insert,如果设
//置为false,不做任何的操作,详情可以见【2.1.2】
multi:<boolean> //multi: 类型为:boolean; 可选的,默认值是false。
//如果根据查询条件找到对应的多条记录是,如果设置为false时,只修改第一条,
//如果设置为true,全部更新,详情可以见【2.1.3】
)
*/
/*单纯的修改列:【2.1.1】$set*/
db.Student.update(
{age : 120}, //相当于过滤用的查询条件
//相当于SQL语句中的set,即是重新赋新值用的
{ $set: { name : '柯镇恶',birthday:ISODate('2011-11-11')} }
)
/*upsert:【2.1.2】*/
db.Student.update(
{age : 112}, //相当于过滤用的查询条件
//相当于SQL语句中的set,即是重新赋新值用的
{ $set: { name : '长寿啊',birthday:ISODate('2011-11-11')} }
,true
)
/*multi:【2.1.3】*/
db.Student.update(
{age : 120}, //相当于过滤用的查询条件
//相当于SQL语句中的set,即是重新赋新值用的
{ $set: { name : '名字全部更新了',birthday:ISODate('2011-11-11')} }
,false
,true
)
//2.2 对单个字段进行修改
/**
$inc 用来增加已有键的值,或者在键不存在时创建一个键。是专门来增加
(和减少)数字的。只能用于整数、长整数或双精度浮点数。要是用在其他
类型的数据上就会导致操作失败,详情见【2.2.1】
$rename 重命名字段。新的字段名称不能和文档中现有的字段名相同,详情见【2.2.2】
$setOnInsert 执行insert操作时,操作给相应的字段赋值,详情见【2.2.3】
$set 用来指定一个键的值。如果这个键不存在,则创建它,详情见【2.2.4】
$unset 从文档中移除指定的键。
**/
/*$inc:【2.2.1】*/
db.Student.update(
{_id:'007'},
{$inc:{age:11}}
)
/*$rename:【2.2.2】*/
db.Student.update(
{_id:'007'},
{$rename:{'name':'newname'}}
)
/*$setOnInsert:【2.2.3】*/
db.Student.update(
{_id:'998'}, {$setOnInsert:{新的字段名:'jack'}},{upsert:true}
)
/*$set:【2.2.4】*/
db.Student.update(
{_id:'998'}, {$set:{指定字段的名:'$set的效果',name:'李莫愁',age:38}}
)
/*unset:【2.2.5】*/
db.Student.update(
{_id:'998'}, {$unset:{新的字段名:'内容就随便写就可以了'}}
)
//-------------------------------------3.删除-------------------------------------
//###基本语法:db.collection.remove(query, justOne)
//3.1按照条件删除
db.Student.remove({_id:'998'});
//3.2 删除文档中的全部数据
db.Student.remove({})
//-----------------4.查询------------
//4.1查询全部
db.getCollection('Student').find({})
db.Student.find();
//4.2按照条件查询:集合上执行查询,并返回一个游标对象。
db.Student.find({_id:'001'});
//4.3执行查询,并返回一个单独的文档
db.Student.findOne({_id:'001'});
3、Java对MongoDB的操作
3.1) . mongodb七步走
package com.rj.bd;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
/**
* @desc 获取一台mongodb的连接
* @author HYZ
* @time 2021年1月19日
*
*/
public class App {
public static void main( String[] args ){
// 1.指定ip和端口获取mongodb的连接
MongoClient mongo = new MongoClient("127.0.0.1", 27017);
boolean lock = mongo.isLocked();
if (!lock) {//2.判断连接是否成功!
System.out.println("mongodb数据库连接成功!");
//3.获取目标数据库
MongoDatabase db = mongo.getDatabase("mongodb001");
//4.获取数据库中的全部集合(所有的表)
MongoIterable<String> collectionList = db.listCollectionNames();
// 5.获取所有集合(表)的迭代器
MongoCursor<String> it = collectionList.iterator();
while (it.hasNext()) // 6.循环结果集
{
String everyCollectionName = (String) it.next();
System.out.println(everyCollectionName);
}
it.close();
// 7.关闭mongodb对象
mongo.close();
}
else {
System.out.println("mongodb数据库连接失败");
}
}
}
3.2) . mongodb的查询
package com.rj.bd;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.bson.Document;
import org.bson.types.BasicBSONList;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
/**
* @desc mongodb之查询操作
* @author HYZ
* @time 2021年1月19日
*/
public class MongoDBQuery {
public static void main(String[] args) {
// 1.指定ip和端口获取mongodb的连接
MongoClient mongo = new MongoClient("127.0.0.1", 27017);
DB db = mongo.getDB("mongodb001");
DBCollection collection_teacher = db.getCollection("Teacher");
/*0.查询全部
DBCursor cursor = collection_teacher.find();
while (cursor.hasNext()) {
System.out.println( cursor.next());
}*/
/*1.模糊查询
DBCursor cursor = collection_teacher.find(getLikeStr("明"));
while (cursor.hasNext()) { // 循环输出结果
System.out.println(cursor.next().get("tname"));
}*/
/*2.where关键字
DBCursor cursor = collection_teacher.find(whereFor());
while (cursor.hasNext()) { // 循环输出结果
System.out.println(cursor.next().get("tname"));
}*/
/*3.关系运算符
* * $gte:>=
* $lte:<=
* $gt:>
* $lt:<
*
DBCursor cursor = collection_teacher.find(releation());
while (cursor.hasNext()) { // 循环输出结果
System.out.println(cursor.next().get("tname"));
}
*/
/*4.in关键字:在。。。。范围之内
DBCursor cursor = collection_teacher.find(inDemo());
while (cursor.hasNext()) { // 循环输出结果
System.out.println(cursor.next().get("tname"));
}*/
/*5.and:且的意思
DBCursor cursor = collection_teacher.find(andDemo());
while (cursor.hasNext()) { // 循环输出结果
System.out.println(cursor.next().get("tname"));
}*/
/*6.or关键字:或者的意思*/
DBCursor cursor = collection_teacher.find(orDemo());
while (cursor.hasNext()) { // 循环输出结果
System.out.println(cursor.next().get("tname"));
}
}
/**
* @desc or关键字:或者的意思
* @return
*/
private static BasicDBObject orDemo() {
BasicDBList values=new BasicDBList();
values.add(new BasicDBObject("age", new BasicDBObject("$lt", 100)));
values.add(new BasicDBObject("age", new BasicDBObject("$gt", 10)));
return new BasicDBObject("$or", values);
}
/**
* @desc 5.and:是且的意思
* @return
*/
private static BasicDBObject andDemo() {
BasicDBObject document=new BasicDBObject();
document.put("tname", "盛明兰");
document.put("sex", "女");
return document;
}
/**
* 4.in关键字:要查询年龄为80、90、50的用户信息,我们可以这样:
创建一个临时的条件列表对象,将条件值分别添加进去
* 简而言之:就是在...范围之内
* @return
*/
private static BasicDBObject inDemo() {
BasicBSONList bsonList=new BasicBSONList();
for(int i =10;i<100;i++)
{
bsonList.add(i);
}
return new BasicDBObject("age",new BasicDBObject("$in", bsonList));
}
/**
* @desc 3.关系运算符
* @return
*/
private static BasicDBObject releation() {
return new BasicDBObject("age",new BasicDBObject("$gt", 10));
}
/**
* @desc 2.where关键字:编写一脚本函数用where进行设置
* @return
*/
public static BasicDBObject whereFor(){
String ageStr = "function (){return parseFloat(this.age) > 20
&& parseFloat(this.age) <= 40}";
return new BasicDBObject("$where",ageStr);
}
/**
* @desc 1.模糊查詢
* @param str
* @return
*/
public static BasicDBObject getLikeStr(String str) {
String regex_all="^.*"+str+".*$";//左右都匹配
String regex_left="^"+str+".*$";//左匹配,意思就是右边是什么无所谓
String regex_right="^.*"+str+"$";//右匹配,意思就是左边是什么无所谓
//Pattern是JDK中的處理正則表達式的類, //忽略大小写
Pattern pattern=Pattern.compile(regex_all,Pattern.CASE_INSENSITIVE);
return new BasicDBObject("tname", pattern);
}
}
3.3) . mongodb的添加
package com.rj.bd;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.util.JSON;
/**
* @desc mongodb之添加操作
* @author HYZ
* @time 2021年1月19日
*/
public class MongoDBInsert {
public static void main(String[] args) {
MongoClient mongo=new MongoClient("127.0.0.1", 27017);
DB db = mongo.getDB("mongodb001");
DBCollection collection_teacher = db.getCollection("Teacher");
/*1.普通的添加
BasicDBObject document=new BasicDBObject();
document.put("_id", "004");
document.put("tname", "齐元若");
document.put("age", 22);
document.put("sex", "男");
collection_teacher.insert(document);*/
/*2.通过添加list实现添加多条
List<BasicDBObject> list_teacher=new ArrayList<BasicDBObject>();
//创建一个空白的文档
BasicDBObject document01=new BasicDBObject();
document01.put("tname", "王药师");
document01.put("age", 90);
//创建一个空白的文档
BasicDBObject document02=new BasicDBObject();
document02.put("tname", "欧阳锋");
document02.put("age", 78);
list_teacher.add(0, document01);
list_teacher.add(1, document02);
collection_teacher.insert(list_teacher);*/
/*3.添加JSON数据
DBObject teacher_json=(DBObject) JSON.parse("{'tname':
'花满楼','age':38,'sex':'男'}") ;
collection_teacher.insert(teacher_json);*/
/*4.使用Map对象实现添加数据*/
Map documentMap =new HashMap();
documentMap.put("tname", "乔峰");
documentMap.put("age", "45");
documentMap.put("sex", "男");
collection_teacher.insert(new BasicDBObject(documentMap));
mongo.close();
}
}
3.4) . mongodb的修改
package com.rj.bd;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
/**
* @desc mongodb之修改操作
* @author HYZ
* @time 2021年1月19日
*/
public class MongoDBUpdate {
public static void main(String[] args) {
MongoClient mongo=new MongoClient("127.0.0.1", 27017);
DB db = mongo.getDB("mongodb001");
DBCollection collection_teacher = db.getCollection("Teacher");
/*1.更新一条数据
BasicDBObject oldData = new BasicDBObject("_id", "003");
BasicDBObject newData = new BasicDBObject("$set",
new BasicDBObject("tname", "666"));
collection_teacher.update(oldData, newData);*/
/*2.增加式的修改
*
* 格式:db.collectionName.update(query, obj, upsert, multi);
* 对于upsert(默认为false):如果upsert=true,如果query找到了符合条件的行,
* 则修改这些行,如果没有找到,则追加一行符合query和obj的行。如果upsert为false,
* 找不到时,不追加。
对于multi(默认为false): 如果multi=true,则修改所有符合条件的行,
否则只修改第一条符合条件的行。
*
*
* */
BasicDBObject oldData=new BasicDBObject();
//oldData.put("age", 120);
//如果这样的话在第四个参数的所用下将表中所有性别为男的数据更改为名字为柯瞎子
oldData.put("sex", "男");
BasicDBObject newData=new BasicDBObject();
newData.put("$set",new BasicDBObject("tname", "柯瞎子") );
collection_teacher.update(oldData, newData, true, true);
mongo.close();
}
}
3.5). mongodb的删除
package com.rj.bd;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
/**
* @desc mongodb之删除操作
* @author HYZ
* @time 2021年1月19日
*/
public class MongoDBDelete {
public static void main(String[] args) {
// 1.指定ip和端口获取mongodb的连接
MongoClient mongo = new MongoClient("127.0.0.1", 27017);
DB db = mongo.getDB("mongodb001");
DBCollection collection = db.getCollection("Teacher");
/*4.1删除:按照条件删除
BasicDBObject docuemnt_del_condition =new BasicDBObject();
docuemnt_del_condition.put("_id", "004");
collection.remove(docuemnt_del_condition);*/
/*4.2删除:删除Teacher文档中的全部内容
collection.remove(new BasicDBObject() );*/
/*4.3删除:把Student这个文档删除了*/
collection.drop();
mongo.close();
}
}