1. 简介
MongoDB是一个开源的基于分布式的文件存储系统,它将数据以文档的形式存储,数据结构由键值对(k,v)组成,其文档有种类似json对象的感觉。
2. 概念理解
- 数据库:database;
- 集合:collection,可以理解为RDBMS中的表;
- 文档:document,可以理解为RDBMS中的一行记录
- 主键:primary key,MongoDB自动将_id字段设置为主键
3. 基本操作
- 创建数据库:use DATABASE_NAME;
检查当前选择的数据库:db;
查询数据库列表:show dbs; - 删除数据库:db.dropDatabase();
- 插入文档(插入时会自动创建集合): db.COLLECTION_NAME.insert(document)
//_id默认创建 db.collection_name.insert({ name: 'qs123' })
- 查询文档:db.COLLECTION_NAME.find()
//查询所有 db.collection_name.find() //按条件查询 db.collection_name.find({"name":"qs123"})
- MongoDB中的and和or:
and:用逗号“,”分开即可
or:需要使用$or关键字db.collection_name.find({key1:value1, key2:value2})
db.collection_name.find( { $or: [ {key1: value1}, {key2:value2} ] } )
- 更新文档:
db.collection_name.update({ 'name':'qs123'},{$set:{'name':'newQs123} })
- 删除文档:remove()
//删除所有name="newQs123"的文档 db.collection_name.remove({ 'name':'newQs123' })
- Save方法:将会替换要操作的文档
4. java操作MongoDB
- 工程中引入依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.11.0</version>
</dependency>
- java对MongoDB的CRUD
package com.qs.mongo.utils;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
/**
* 连接数据库
*
* @Author: QuS
* @Date: 2019/10/11 9:55
*/
public class MongoDBJDBC {
public MongoDatabase getConnection() {
MongoDatabase mongoDatabase = null;
try {
//连接到mongodb服务
MongoClient mongoClient = new MongoClient("localhost", 27017);
//连接数据库
mongoDatabase = mongoClient.getDatabase("test");
System.out.println("=======Connect to database successfully=========");
} catch (Exception e) {
e.printStackTrace();
System.out.println("=======Connect to database error==========");
}
return mongoDatabase;
}
}
package com.qs.mongo.operate;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.qs.mongo.utils.MongoDBJDBC;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import com.mongodb.client.model.Filters;
/**
* @Author: QuS
* @Date: 2019/10/11 10:14
*/
public class MongoCRUD {
MongoDatabase mongoDatabase = null;
/**
* 获取连接
*/
@Before
public void getConnection() {
MongoDBJDBC mongoDBJDBC = new MongoDBJDBC();
mongoDatabase = mongoDBJDBC.getConnection();
}
/**
* 选择集合(理解为表)并且插入文档(理解为一行一行的数据)
*/
@Test
public void getCollectionAndInsert() {
try {
MongoCollection<Document> collection = mongoDatabase.getCollection("qs");
System.out.println("======集合qs选择成功=====");
//插入文档
Document document1 = new Document("_id", "1")
.append("name", "qushuai1")
.append("sex", "男")
.append("age", "22")
.append("phone", "12345678")
.append("addr", "天津");
Document document2 = new Document("_id", "2")
.append("name", "qushuai2")
.append("sex", "男")
.append("age", "19")
.append("phone", "12345678")
.append("addr", "成都");
ArrayList<Document> documents = new ArrayList<>();
documents.add(document1);
documents.add(document2);
collection.insertMany(documents);
System.out.println("========文档插入成功===========");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 查询所有文档(可以理解为RDBMS中的一行一行的数据)
*/
@Test
public void queryDocuments() {
//选择集合
MongoCollection<Document> collection = mongoDatabase.getCollection("qs");
//查询集合中所有的文档
FindIterable<Document> documentsIt = collection.find();
MongoCursor<Document> it = documentsIt.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
/**
* 更新文档
*/
@Test
public void updateDocument() {
//选择集合
MongoCollection<Document> collection = mongoDatabase.getCollection("qs");
//更新文档 将addr=成都改为addr=上海
collection.updateMany(Filters.eq("addr", "成都"),
new Document("$set", new Document("addr", "上海")));
System.out.println("========文档更新成功==========");
//查看结果
MongoCursor<Document> it = collection.find().iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
/**
* 删除文档
*/
@Test
public void deleteDocument() {
MongoCollection<Document> collection = mongoDatabase.getCollection("qs");
//删除符合条件的第一个文档(删除第一个name=qs321的文档)
collection.deleteOne(Filters.eq("name", "qs321"));
System.out.println("========第一个删除成功========");
//删除所有符合条件的文档(删除所有sex=男 and name=qs321)
BasicDBObject condition1 = new BasicDBObject();
condition1.put("sex", "男");
condition1.put("name", "qs321");
collection.deleteMany(condition1);
//删除所有符合条件的文档(删除所有id=1 or id=2)
//通过BasicDBList与BasicDBObject的相结合可以得出比较复杂的条件。
BasicDBObject condition2 = new BasicDBObject();
BasicDBList values = new BasicDBList();
values.add(new BasicDBObject("_id", "1"));
values.add(new BasicDBObject("_id", "2"));
condition2.put("$or", values);
collection.deleteMany(condition2);
//删除age<20 or name=qushuai1的文档
BasicDBObject condition3 = new BasicDBObject();
BasicDBList values1 = new BasicDBList();
values1.add(new BasicDBObject("age", new BasicDBObject("$lt", 20)));
values1.add(new BasicDBObject("name", "qushuai1"));
condition3.put("$or", values1);
collection.deleteMany(condition3);
//查看结果
MongoCursor<Document> it = collection.find().iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}