mongo学习记录

mongo数据库

MongoDB 是一个基于分布式文件存储的NoSQL(Not Only SQL ),)非关系型数据库,由C++语言编写,运行稳定,性能高,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
MongoDB特点

模式自由 :可以把不同结构的文档存储在同一个数据库里
面向集合的存储:适合存储 JSON风格文件的形式
完整的索引支持:对任何属性可索引
丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成
MongoDB文档类似于JSON对象,字段值可以包含其他文档、数组、文档数组

安装和创建数据库

下载地址
我这里选中的是4.02(current release)、window 64-bit x64 、zip(解压即可用)
注:版本号带有"rc",意思是预发布版本,"rc2"就是预发布第二版

创建数据、日志、配置文件

//建议的结构
mongodb\data\conf\mongod.conf
mongodb\data\db
mongodb\data\log\mongo.log

在mongod.conf中写入如下内容

#数据库路径
dbpath=.....\data\db

#日志输出文件路径
logpath=.....\data\log\mongo.log

#错误日志采用追加模式
logappend=true

#启用日志文件,默认启用
journal=true

#这个选项可以过滤掉一些无用的日志
quiet=true

#端口号 默认为27017
port=27017

注意路径要成绝对路径,补全logpath和dbpath

安装服务
将路径切换到mongod安装目录的bin下,执行命令,使用认证方式安装服务
mongod -auth --config D:\mongodb\mongo.cfg -install

使用mongo.exe进入mongodb的命令行管理

>use admin
switched to db admin

db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]});

exit;

进入mongo,不输入账户密码

>show dbs;
#什么也不会输出,因为还没有账户验证

>db.auth('admin','pwd');
# 0代表失败,1代表成功
# 接着手腕 show dbs 就可以查看到了

# 也可以登录的时候,就验证
mongo -u admin -p pwd --authenticationDatabase admin

创建一个数据库mydb和一个管理它的用户(上一步已经登录验证过amid,我们直接建立)

use mydb
db.createUser({user: "myuser",pwd: "root",roles: [{ role: "readWrite", db: "minily" }]});

就演示到这里,其他命令可以去查看官网文档

使用java连接mongo

阿里云的仓库下载驱动包
这里下载的是:

  • mongo-java-driver-3.9.0.jar 驱动包
  • mongo-java-driver-3.9.0-sources.jar 源码
  • mongo-java-driver-3.9.0-javadoc.jar 参考文档
    添加到工程路径中
import org.bson.Document;
import org.junit.jupiter.api.Test;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBJava {
	// 测试数据连接和显示集合名称
	@Test
	public void test1() {
		try {
			// 使用url地址连接,第一个root账号,第二个root为密码
			MongoClientURI uri = new MongoClientURI("mongodb://admin:123456@127.0.0.1");
			MongoClient mongoClient = new MongoClient(uri);
			// mydb数据库的名称
			MongoDatabase db = mongoClient.getDatabase("mydb");
			// 显示该数据库下所有集合的名称
			for (String name : db.listCollectionNames()) {
				System.out.println(name);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 测试创建新的集合
	@Test
	public void test2() {
		try {
			// 使用url地址连接,第一个root账号,第二个root为密码
			MongoClientURI uri = new MongoClientURI("mongodb://admin:123456@127.0.0.1");
			MongoClient mongoClient = new MongoClient(uri);
			// mydb数据库的名称
			MongoDatabase db = mongoClient.getDatabase("mydb");
			// 创建新的集合
			db.createCollection("stu");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 测试插入文档
	@Test
	public void test3() {
		try {
			// 使用url地址连接,第一个root账号,第二个root为密码
			MongoClientURI uri = new MongoClientURI("mongodb://admin:123456@127.0.0.1");
			MongoClient mongoClient = new MongoClient(uri);
			// mydb数据库的名称
			MongoDatabase db = mongoClient.getDatabase("mydb");
			// 获取新创建的集合
			MongoCollection<Document> stucol = db.getCollection("stu");
			// 创建文档
			Document zsdoc = new Document().append("name", "张三").append("gender", "male").append("age", 20);
			Document lsdoc = new Document().append("name", "李四").append("gender", "male").append("age", 25);

			// 插入文档
			stucol.insertOne(zsdoc);
			stucol.insertOne(lsdoc);

			// 查看插入的文档
			for (Document doc : stucol.find()) {
				System.out.println(doc.toJson());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 测试删除文档
	@Test
	public void test4() {
		try {
			// 使用url地址连接,第一个root账号,第二个root为密码
			MongoClientURI uri = new MongoClientURI("mongodb://admin:123456@127.0.0.1");
			MongoClient mongoClient = new MongoClient(uri);
			// mydb数据库的名称
			MongoDatabase db = mongoClient.getDatabase("mydb");
			// 获取新创建的集合
			MongoCollection<Document> stucol = db.getCollection("stu");
			// 删除姓名为张三的同学
			// stucol.deleteOne(Filters.eq("name","张三"));
			// 删除指定的id的类型为ObjectIdlei类型
			// stucol.deleteOne(Filters.eq("_id", new
			// ObjectId("5b7bc155a78b5afe8455f3a6")));
			// BasicDBObject dbobj = new BasicDBObject("_id",new
			// ObjectId("5b7cb72ba78b5a9d0038e262"));
			// stucol.deleteOne(dbobj);
			// 删除多条名字不是王五的同学
			// stucol.deleteMany(Filters.ne("name", "王五"));
			// 查看文档
			for (Document doc : stucol.find()) {
				System.out.println(doc.toJson());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 测试修改文档
	@Test
	public void test5() {
		try {
			// 使用url地址连接,第一个root账号,第二个root为密码
			MongoClientURI uri = new MongoClientURI("mongodb://admin:123456@127.0.0.1");
			MongoClient mongoClient = new MongoClient(uri);
			// mydb数据库的名称
			MongoDatabase db = mongoClient.getDatabase("mydb");
			// 获取新创建的集合
			MongoCollection<Document> stucol = db.getCollection("stu");
			// 更改第一条匹配条件的文档
			// stucol.updateOne(Filters.eq("name", "张三"), new Document("$set", new
			// Document().append("name", "王五")));
			// 更新多条记录修改名字中包含五,将其修改为李四
			stucol.updateMany(Filters.regex("name", "五"), new Document("$set", new Document().append("name", "李四")));
			// 更新多条记录修改名字为李开始的修改为王五
			stucol.updateMany(Filters.regex("name", "^李"), new Document("$set", new Document().append("name", "王五")));

			// 查看文档
			for (Document doc : stucol.find()) {
				System.out.println(doc.toJson());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 测试查询文档
	@Test
	public void test6() {
		try {
			// 使用url地址连接,第一个root账号,第二个root为密码
			MongoClientURI uri = new MongoClientURI("mongodb://admin:123456@127.0.0.1");
			MongoClient mongoClient = new MongoClient(uri);
			// mydb数据库的名称
			MongoDatabase db = mongoClient.getDatabase("mydb");
			// 获取新创建的集合
			MongoCollection<Document> stucol = db.getCollection("stu");

			// 查询全部文档
				FindIterable<Document>  doc1 = stucol.find();
				for (Document doc : doc1) {
					System.out.println(doc.toJson());
				}
			// 条件查询程序年龄为25的学生
				FindIterable<Document>  doc2 = stucol.find(Filters.eq("age", 20));
				for (Document doc : doc2) {
					System.out.println(doc.toJson());
				}

			// 条件查询程序年龄大于20的学生
				FindIterable<Document>  doc3 = stucol.find(Filters.gt("age", 20));
				for (Document doc : doc3) {
					System.out.println(doc.toJson());
				}

			// 条件查询程序年龄大于20的并且姓名要以王开始的学生
				FindIterable<Document>  doc4 = stucol.find(Filters.and(Filters.gt("age", 20),Filters.regex("name", "^王")));
				for (Document doc : doc4) {
					System.out.println(doc.toJson());
				}

			// 查询id为5b7cc34ea78b5a24b8384496的学生
				FindIterable<Document>  doc5 = stucol.find(Filters.eq("_id", new ObjectId("5b7cc34ea78b5a24b8384496")));
				for (Document doc : doc5) {
					System.out.println(doc.toJson());
				}

			// 投影查询,查询部分域,只查询_id=5b7cc34ea78b5a24b8384496的学生,只显示name域( 0不显示该域, 1显示该域)
				FindIterable<Document>  doc6 = stucol.find(Filters.eq("_id", new ObjectId("5b7cc34ea78b5a24b8384496"))).projection(new Document().append("_id", 0).append("name", 1));
				for (Document doc : doc6) {
					System.out.println(doc.toJson());
				}

			// 将查询结果排序按照年龄name升序和_id为降序(1为升序, -1 为降序)
				FindIterable<Document>  doc7 = stucol.find().sort(new Document().append("age", 1).append("_id", 1));
				for (Document doc : doc7) {
					System.out.println(doc.toJson());
				}

			// 统计个数总共多少个文档
				long   doc8 = stucol.count();
				System.out.println(doc8);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

参考链接

http://mongoing.com/archives/27359
https://app.getpocket.com/read/2690114961

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值