MongoDB的简介和使用(基于JAVA)
1. MongoDB的相关概念
① MongoDB 是一个面向文档的数据库系统。文档数据库区别于传统的其他数据库,它是用来管理文档的。传统数据库中,信息被分割成离散的数据段,而在文档数据库中,文档是处理信息的基本单位,一个文档相当于关系数据库中的一条记录。文档数据库不同于文件系统,也不同于关系数据库(不提供对参照完整性和分布事务的支持)。
② MongoDB中,文档是对数据的抽象,表现形式威BSON(Binary JSON)。MongoDB 把BSON作为数据存放的磁盘中。
③ MongoDB 的特点:
- mongo是c++实现的,性能优越速度快。
- 所有实体都是在首次使用时创建。
- 没有严格的事务特性,但是它保证任何一次数据变更都是原子性的。
- 也没有固定的数据模型。直接存取BSON,更加灵活,可以在文档中插入复杂数据类型。开发者在使用 MongoDB时无须预定义关系数据库中”表”等数据库对象。实用性更强,大大提升开发进度。
- MongoDB目前不支持join操作,需要复杂查询的应用不建议使用MongoDB。
- MongoDB 与 MySQL数据库的对比:
MySQL | MongoDB |
---|---|
表 | 集合 |
行 | 文档 |
列 | 成员 |
主键 | Object id (自动生成) |
2. 安装和使用MongoDB
①. http://www.mongodb.org/ 官网下载安装包,傻瓜化安装。
②.MongoDB安装完成后,进去安装目录, 此时发现只有Server文件夹。 手动新建data文件夹和log文件夹,分别用于存放数据库文件和日志文件。
③.手动新建mongo.config配置文件,并复制下面两行代码。分别是data文件夹绝对路径和log文件夹绝对路径。
dbpath=C:\Software\MongoDB\data
logpath=C:\Software\MongoDB\log\mongo.log
④. 进入MangoDB安装目录的bin目录下,启动MongoDB,如下图:
mongod.exe –config C:\Software\MongoDB\mongo.config
⑤. 启动完成后,重新打开一个dos窗口,进行对MongoDB的操作。刚才的窗口如果关闭,则MangoDB 服务停止。
常用语法:
db.user.insert({“id”: “001”, “name”: “pancong”});
db.user.drop(); // 删除user集合
db.user.find(); // 查询所有
db.user.find({ “age” : { $gt: 20 } } ); // greater than : field > value
3. 使用Java对MongoDB进行操作(需要引入MongoDB驱动包和Junit)
Mongo mongo = new Mongo(); //创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017
DB db = mongo.getDB(“demo”); //获取一个demo数据库,如果不存在自动创建
DBCollection users = db.getCollection(“users”); //获取集合,相当于传统数据库中的表
MongoDBTest
package com.mongoDB.demo;
import java.net.UnknownHostException;
import java.util.Date;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.util.JSON;
public class MongoDBTest {
public static void main(String[] args) {
try {
Mongo mongo = new Mongo();
System.out.println("DataBases:");
for(String DBName:mongo.getDatabaseNames()){
System.out.println(DBName);
}
DB demoDB = mongo.getDB("demoDB");
DBCollection users = demoDB.getCollection("users");
//查询集合中的数据 DBCursor可以看作传统数据库中的游标
DBCursor cur = users.find();
while(cur.hasNext()){
System.out.println(cur.next());
}
System.out.println(cur.count());
System.out.println(cur.getCursorId());
System.out.println(JSON.serialize(cur));
User user = new User("hw"+new Date(), (int)(Math.random()*50));
users.insert(user);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
}
}
MongoDBDemo
package com.mongoDB.demo;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
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.MongoException;
public class MongoDBDemo {
//连接对象
Mongo mongo = null;
//数据库
DB db = null;
//集合
DBCollection users = null;
//初始化数据库
@Before
public void init() {
try {
mongo = new Mongo();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
//获取demo数据库,没有会自动创建
db = mongo.getDB("demo");
//获取users Collection, 没有会自动创建
users = db.getCollection("user");
}
@After
public void close(){
if(mongo != null)
mongo.close();
//连接对象
mongo = null;
//数据库
db = null;
//集合
users = null;
}
//查询所有
@Test
public void findAll(){
System.out.println("查询所有数据");
DBCursor cur = users.find();
while(cur.hasNext()){
System.out.println(cur.next());
}
System.out.println("现有记录:"+cur.count());
}
@Test
public void addOne(){
System.out.println("添加一条记录");
User user = new User("hw"+new Date(), (int)(Math.random()*50));
users.save(user);
this.findAll();
}
@Test
public void addList(){
System.out.println("添加多条记录");
List<DBObject> userList = new ArrayList<>();
for(int i=0; i< 5; i++){
userList.add(new User("hw"+new Date(), (int)(Math.random()*50)));
}
users.insert(userList);
this.findAll();
}
@Test
public void delete(){
System.out.println("删除年龄大于20岁的");
users.remove(new BasicDBObject("Age", new BasicDBObject("$gt",20)));
this.findAll();
}
@Test
public void findSort(){
System.out.println("按照年龄排序");
DBCursor cur = users.find().sort(new BasicDBObject("Age",-1));
while(cur.hasNext()){
System.out.println(cur.next());
}
}
@Test
public void update(){
System.out.println("修改,年龄低于20岁的改为50岁");
users.update(new BasicDBObject("Age",19), new BasicDBObject("$set", new BasicDBObject("Age",100)));
// db.user.update({"Age":19},{"$set":{"Age":100}},false,false); 选择只更新更新的第一条数据
// db.user.update({"Age":19},{"$set":{"Age":100}},false,true); 所有满足条件的数据都更新
this.findAll();
}
}