[face_数据库篇] Mongodb
2021-04-04 22:13
901 查看
数据库之Mongodb
- 特点
c++编写,分布式文件数据库,键值存储,易扩展
默认端口:27107
键值的值支持几乎所有的数据类型:数字,字符串,列表,时间,空null,字典
- 与关系性数据库的区别
表 ---> collection 集合
列 ---> field 字段
行 ---> document 文档
主键 ---> _id
-
mongodb思想:使用了一个不存在的对象,即没有创建该对象时可直接用,当添加了数据就自动创建了
- 常用命令
$ mongo # shell环境进入mongo
show dbs:显示数据库列表
show collections:显示当前数据库中的集合(类似关系数据库中的表table)
show users:显示所有用户
use yourDB:切换当前数据库至yourDB
db :查看当前库
db.dropDatabase() :删库
db.help() :显示数据库操作命令
db.yourCollection.help() :显示集合操作命令,yourCollection是集合名
MongoDB没有创建数据库的命令,如果你想创建一个“School”的数据库,先运行use School命令,之后做一些操作(如:创建聚集集合db.createCollection('teacher')),这样就可以创建一个名叫“School”的数据库
- 为某个库创建用户
> use my_mongo switched to db my_mongo > db.createUser( ... { ... user:'python', ... pwd:'123456', ... roles:[{role:'readWrite',db:'my_mongo'},{role:'read',db:'test'}] ... } ... )
- 登录
#注意使用双引号而非单引号 mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin" # 或 mongo use admin db.auth("root","123")
- python操作mongodb
from pymongo import MongoClient # 创建连接 mo_cli = MongoClient('mongodb://python:123456@localhost:27017/my_mongo') # 连接到数据库 db = mo_cli.my_mongo # 获取数据库中所有的集合 collist = db.collection_names(include_system_collections=False) # 创建集合 table_dep = db.dep # 增 # 向集合中插入数据 table_dep.insert_one({'name': '商务部'}) # 插入多条 li = [{"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"}, {"name": "QQ", "alexa": "101", "url": "https://www.qq.com"}, {"name": "Github", "alexa": "109", "url": "https://www.github.com"}] table_dep.insert_many(li) # 查 # 根据条件查询 : db.db_name.col_name.find({"条件"}) 条件为空查询所有 # 查询单条直接返回值 res = table_dep.find_one({'name': 'QQ'}) # 查询多条需要for循环 ret = table_dep.find({'name': 'QQ'}) print(ret, type(ret)) # <pymongo.cursor.Cursor object at 0x7f557d6e9f60> <class 'pymongo.cursor.Cursor'> for i in ret: print(i) # 改 # 更新 update({条件},{待修改关键字}) table_dep.update_one({'alexa': {'$gte': 109}}, {"$set":{'name': 'xxxxxxx'}}) table_dep.update_many({'alexa': {'$gte': 109}}, {"$set":{'name': 'xxxxxxx'}}) table_dep.save({'name':888888}) # 直接存,如果有相同的name则覆盖 # 删 table_dep.remove({'alexa': "100"}) # 指定条件删除,如果不指定则清空集合 # 关键字$及$修改器 $set $inc $push $pull $pop # $ 代表的是下标,位置 db.table.update_one({"score":30}, {"$set":{"test_list.0":9}}) # 修改满足条件的,列表索引为0的元素为9 & db.table.update_one({"score":30,"test_list":2}, {"$set":{"test_list.$":9}}) # 将列表元素为2的改为9 # 表较运算符 $gt\$lt\$gte\$lte等 db.table_name.find_one({"score":{"$gt": 80}}) # 获取分数大于80的 # 自动自增$inc db.table_name.update_one({"score":59}, {"$inc":{"score":1}}) # 为分数为59的,增加1分 #删除字典中一个键值$unset db.table_name.update_one({"name":"qq"}, {"$unset":{"age":30}}) # 将名字为qq的age键值删掉,相当于删除字段 # 向列表 尾部 中添加元素$push db.table_name.update_one({}, {"$set":{"china_list":[11,22,33]}}) # 向原有数据的字典中添加一个数组字段 db.table_name.update_one({"name":"xiu"}, {"$push":{"china_list":77}}) # 向name为xiu的字段china_list中尾部添加一个元素77 # 从列表中删除用$pull db.table_name.update_many({"name":"xiu"}, {"$pull":{"china_list":77}}) # 将所有满足条件的列表中77元素删除 # 指定位置删除 $pop db.table_name.update_many({"name":"xiu"}, {"$pop":{"china_list":1}}) # 1表示最后一个,-1表示第一个 # 聚合操作:筛选($match)、投射($project)、分组($group)、排序($sort)、限制($limit)、跳过($skip) db.emp.aggregate({"$group":{"_id":$分组字段, "新的字段名":聚合操作符}}) # 查每个用户,关联了多少项目 db.emp.aggregate([{$group : {_id : "$by_user", pro_num_count : {$sum : 1}}}])
相关文章推荐
- mongodb 导出数据
- 初学者读书笔记数据库篇(一)
- 21.30 mongodb创建集合、数据管理
- python操作mongodb之八地理索引空间数据
- (数据库篇) SQL查询~ 存在一个表而不在另一个表中的数据
- iOS开发数据库篇—FMDB数据库队列
- iOS开发数据库篇—SQLite简单介绍
- MongoDB:拥有 RDBMS 特性的 NoSQL 数据存储 (一) java程序员教程
- 安卓开发数据库篇
- springboot测试环境中为什么会将mongodb的数据自动存储到test表中
- 五、MongoDB的基本数据类型
- iOS 数据库篇4—SQLite的应用
- 13、MongoDB的分片,以及分布式的实现(分片,拆分的是集合,不是单条数据)
- MongoDB如何存储数据
- Python使用mongodb保存爬取豆瓣电影的数据过程解析
- MongoDB 清理数据
- Mongodb 利用mongoshell进行数据类型转换的实现方法
- MongoDB导入导出以及数据库备份以及.dat数据
- mongodb数据备份脚本和日志切割脚本
- Mongodb数据导出工具mongoexport和导入工具mongoimport介绍