nosql数据库-mongodb
1 认识
2 库,集合操作
3 crud
4 pymongo
python 面向的是开源的数据库;
mysql mongdb postgreSQL REDIS 都是开源的
1--Nosql
什么是 NoSQL?
NoSQL,指的是非关系型的数据库。NoSQL 有时也称作 Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL 用于超大规模数据的存储。(例如谷歌或 Facebook 每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
为什么使用 NoSQL ?
今天我们可以通过第三方平台(如:Google,Facebook 等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那 SQL 数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。
|--1.2mongodb 是文档型存储
一个里面有很多的数据库,mongodb 数据库里面存的类型是 json, 键值对的格式
进入命令 mongo
退出出命令 exit
|--2 隐式创建、库操作 集合操作
2.1-mongodb 中的隐式创建
show dbs; 显示所有的数据库
mongo 底层引擎是 JavaScript
在 mongodb 里面空的数据库是没有意义的,use test;// 切换数据库,(调用一个不存在的数据库 mongdb 会自动创建一个数据库),但是此时因为数据库是空的,show dbs; 是看不到这个数据库的,必须给 test 数据库创建集合之后,再 shou dbs;才能看到 test 数据库,这就是所谓的隐式操作
db.createCollection('xxx')
查看当前再那个数据库里面; db;
删除某个数据库,先切换到该数据库下面 use test; 再执行命令 db.dropDatabase(); 即可删除 test 数据库
collection 跟数据上的集合不同,
use test;
show collections; 显示集合
db.createCollection(col_name); 创建集合
db.col_nam.drop(); 删除集合
|--3;crud(create read update delete) 向集合中插入文档, 查询 删除文档 修改文档
db.createCollection('student')
db.student.insert({"name":"LiMing","age":10,"gender":"male"});
插入后自动生成一个 id ,这个 id 也可以自己指定
db.student.insert({"_id":"1","name":"Anny","age":20,"gender":"femal"})
没有格式限制 插入多个数据的时候,插入的字段可以不一致,只要是 json 的格式就可以了
db.student.insert([{"name":"张三","age":"20"},{"name":"李四","gender":"male"} ])
Create Operations
创建操作或者插入操作会向集合添加新的文档。之前有提到过,如果插入时集合不存在,插入操作会创建对应的集合。MongoDB 提供了 3 个插入文档的方法:
`db.collection.insert()``db.collection.insertOne()``db.collection.insertMany()`
||-- 插入单个文档
其中,`db.collection.insertOne()` 用于向集合插入单个文档。而 `db.collection.insertMany()` 和 `db.collection.insert()` 可以向集合插入多个文档。`db.collection.insertOne()` 示例如下:
自动命令执行后会返回一个结果文档,文档输出如下:
这说明文档插入成功。其中,`acknowledged` 代表本次操作的操作状态,状态值包括 `true` 和 `false`。`insertedId` 即该文档的 `_id`。
提示:示例中的省略号是 MongoShell 的换行标识符。换行标识符对命令输入和执行并没有影响,所以本文也不会注重风格的统一,即示例中有时会带有换行符,有时则不带有换行符。
||-- 插入多个文档
`db.collection.insertMany()` 示例如下:
由于本次插入了 2 个文档,所以返回的结果文档会显示两个 `_id`。返回文档内容如下:
查找删除
db.student.find(); 无条件查找,查出所有东西
按照条件查找
查找 gender 是 male 的,height 是 160 的数据
db.student.find({“gender”:"male","height":160})
只显示出姓名, 第一个大括号是查询的条件,第二个大括号是要显示的字段
db.student.find({“name”:"LiMing"},{"age":true,"gender":false,"_id":false})
查找所有人的姓名,年龄, 第一个大括号空,表示查找所有的数据,第二个表示显示的字段
db.student.find({},{"age":true,"_id":false,"name":true})
删除:
db.student.remove({}) 删除所有
db.studentremove({"height":160}) 删除身高 160 的数据
每次挑选一个淘汰,db.student.remove({"gender":"male"},{justOne"true}) , 删除第一个匹配的男生
修改 update, 修改 LiMing 的身高为 170,这个语句是覆盖性的修改,修改后就只剩下了 name 和 height,所以要使用 $set 参数,只修改不覆盖
db.student.update({"name":"LiMing"},{"height":170})
update 默认只是更新一条数据,所以一定要加 multi 参数设置为 true
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true}) 如果你要修改多条相同的文档,则需要设置 multi 参数为 true
pymongo
pymongo.MongoClient 客户端
#连接 mongdb
client=MongoClient('127.0.0.1','27017') 默认的 ip 和端口号这是,不填默认就是这个 , 客户端
# 选择 mongodb 里面的数据库
mydb = client['dbname'] #数据库
col=mydb['student'] #集合
插入文档:
mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" } x = mycol.insert_one(mydict)
执行输出结果为:
<pymongo.results.InsertOneResult object at 0x10a34b288>
insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。
5b2369cac315325f3698a1cf
插入多个文档
集合中插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。
输出结果类似如下:
[ObjectId('5b236aa9c315325f5236bbb6'), ObjectId('5b236aa9c315325f5236bbb7'), ObjectId('5b236aa9c315325f5236bbb8'), ObjectId('5b236aa9c315325f5236bbb9'), ObjectId('5b236aa9c315325f5236bbba')]
更多教程见 菜鸟教程
https://www.runoob.com/mongodb/mongodb-operators.html
java--mongodb
配置:1 依赖 2 配置文件的配置
3 注解;
启动类
@EnableMongoAuditing
@Document(collection="表名")
@CreatedDate
表示该字段为创建时间时间字段,在这个实体被 insert 的时候,会设置值 ,在 jpa.save 方法被调用的时候,时间字段会自动设置并插入数据库,