数据库之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_mongoswitched 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"# 或mongouse admindb.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的# 自动自增$incdb.table_name.update_one({"score":59}, {"$inc":{"score":1}})  # 为分数为59的,增加1分#删除字典中一个键值$unsetdb.table_name.update_one({"name":"qq"}, {"$unset":{"age":30}})   # 将名字为qq的age键值删掉,相当于删除字段# 向列表 尾部 中添加元素$pushdb.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# 从列表中删除用$pulldb.table_name.update_many({"name":"xiu"}, {"$pull":{"china_list":77}})  # 将所有满足条件的列表中77元素删除# 指定位置删除 $popdb.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}}}])
©著作权归作者所有:来自51CTO博客作者mob604756e88498的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 一个数据开发人员使用的辅助工具
  2. 苹果重新开源分布式数据库FoundationDB,已在内部使用三年!
  3. PDMan 之数据库逆向解析
  4. 来了,SQL在线模拟器
  5. Kafka落选!InfoWorld最佳开源数据平台奖公布
  6. 一文看懂Pinterest如何构建时间序列数据库系统Goku
  7. SQL_2008数据镜像灾难恢复和搭建镜像服务
  8. SSDB:可用于替代Redis的高性能NoSQL数据库
  9. CHNS2015重磅来袭,中国健康领域研究者的福音

随机推荐

  1. golang 如何debug
  2. golang 引用和指针的区别
  3. golang 内存泄露的原因
  4. golang 为什么高并发
  5. golang 默认几核运行
  6. golang 适合做web开发吗
  7. golang可以跨平台吗
  8. golang 是什么写的
  9. golang 开发效率高么
  10. golang 什么时候用锁