简介
MongoDB是一个非常易用的非关系型数据库(NoSQL)以JSON的存储形式将数据存在文档中。其最大的特点就是能应对大数据量、高性能和灵活性需求。
数据结构为: 数据库——集合——文档
数据存在文档中,都是一些JSON数据。每一个文档都是KEY—VALUE 键值对的集合。
为什么要学习这个呢?首先作为一个简单易用的数据库可以给开发带来极大的便利,其次作为一个入门NoSQL数据库的学习很适合,最后就是为后面学习云集成和分布式打基础。
NoSQL
非关系型数据库与关系型数据库最大的区别就是它不用维护“关系”,这就让它相对来说灵活,给了它水平拓展的能力。
我们知道,关系型数据库中是用表来存储数据的,表之间可以存在着关系。
比如:用户表——订单表——商品表 各表利用外键连接起来
如图:通过几个id将表关联起来
而且,传统关系型数据库还要保证没行数据行的数据格式都是一样的,这一点通过SQL命令就能够非常清晰的认识到了
INSERT INTO TABLE A (id, name, info)VALUES(1,‘Kevin’,‘NICE’);
都是要一一对应好数据格式的!
可以这样类比:
NoSQL ------SQL数据库
集合------------表
文档-------------行
而NoSQL数据库就不用管你那么多,它不用维护这些关系,数据可以是不一样的格式,甚至数量都可以不一样。
{
"_id": ObjectId("5f3c9a8d9d7a7e0b5e000001"),
"name": "John Doe",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Anytown",
"zip": "12345"
},
"hobbies": ["reading", "cycling", "hiking"]
}
{
"_id": ObjectId("5f3c9a8d9d7a7e0b5e000002"),
"company": "Example Corp",
"employees": [
{
"name": "Jane Smith",
"position": "Developer",
"years": 5
},
{
"name": "Bob Johnson",
"position": "Designer",
"years": 3
}
],
"locations": ["New York", "San Francisco", "London"]
}
这样,NoSQL不用SQL语句对数据进行操作,而是使用了内置的语句进行操作。
另外,得益于这种数据存储形式,NoSQL数据库易于实现水平拓展,一个数据库服务器存不下了就再加一个就好了。数据库之间分工合作,假设有1—100个key,那一号数据库存储1-50的key,剩下的二号数据库来存就好。提高吞吐量,这就是分片的力量。
简单入门
MongoDB下载地址
下载社区版就行了
安装过程中可勾选安装GUI——compass ,可以方便开发。
连接上数据库后,效果如下:
常用命令:
插入数据:db.collection.insertOne({ key1: "value1", key2: "value2"});
查询数据:db.collection.find({key1: "value1"});
更新数据:db.collection.updateOne({key1: "value1"}, { $set: {key2: "new value"} });
删除数据:db.collection.deleteOne({key1: "value1"});
聚合数据:db.collection.aggregate([ { $match: { key1: "value1" } } ]);
创建集合:db.createCollection(name)
创建数据库:use dbname
这里我们试着创建一个数据库(CET_4):
直接就转到了CET_4这个目录下,CET_4已经被创建
但是它目前是空的
查看数据库信息看不到CET_4的存在。
这里其实是因为:use dbname 命令是用来切换到数据库dbname 的。如果数据库dbname已经存在,那么这个命令会切换到该数据库。如果数据库dbname 不存在,MongoDB 会创建一个新的数据库,但只是创建了一个数据库的名称,数据库中实际上还没有数据。
要等有数据存在数据库中,数据库才会真正地被创建。
这里我们创建一个集合后,CET_4这个数据库就真正被创建了
接下来,我们插入一些数据
insertOne插入一条数据
执行后打印出来的值为true,表示操作成功!ObjectId就是插入的这条数据的唯一标识。
插入多条,以数组的形式提供数据即可
若要进行查询,条件要写在大括号中
db.collection.find({key1: "value1"});
另外,MongoDB支持比较操作符,用于查询比较字段
常用的有:
1 等于 $eq
2 不等于$ne
3 大于$gt
4 小于$lt
5 大于等于$gte
6 小于等于$lte
7 匹配值在指定数组中的文档$in
8 匹配满足JavaScripe表达式的字段$where
如果要控制查询结果中返回的字段。可以使用包含字段和排除字段两种方式来进行投影。
值为1表示包含,为0表示排除
接着我们可以做一些文档更新和替换的操作
更新单个文档:
替换单个文档:
可以给集合改名:
假设该集合已经过期,需要删除:
键入命令——db.items.renameCollection("outdated_CET_4");
那万一删除错了怎么办?
这里需要我们知道怎么备份,我们可以直接用CompassGUI里面提供的方法导出数据,做一个备份
可以导出为JSON或者CSV,CSV可以方便使用EXCEL查看。
备份的话建议使用JSON文件的形式存储。
我们也可以直接通过导入JSON或者CSV文件的方式直接批量导入数据,很方便。