MongoDB

NoSQl
  • not only sql–非关系型数据库
  • 优点:高可扩展性,分布式计算,低成本,架构的灵活性半结构数据化,没有复杂的关系
  • 缺点: 没有标准化,有限的查询功能,最终一致是不直观的程序

MongoDB
  • 特点:
    • 模式自由:可以把不同结构的文档存储在同一个数据库里
    • 面向集合的存储:适合存储json风格的文件形式
  • 数据结构由键值对组成,类似json对象,字段值可以包括其他文档/数组/文档数组

  • 查询mogodb服务器状态:ps -ajx | grep mongod /sudo systemctl status mongod
  • 关闭:sudo service mongod stop
  • 启动:sudo service mongod start

  • 进入MongoDB:mongo
  • 显示所有的数据库:show databases/dbs
  • 选择数据库: use name
  • 查看选择的那个数据库:db
  • 显示集合:show collections
  • 查看集合的数据:db.集合名.find({})

  • 创建新的数据库:use name
  • 删除:db.dropDatabase()

  • 创建新的集合:db.createCollection(“students”)
  • 查看当前所有集合:show tables
  • 删除集合:db.students.drop()

- object id:• 每个文档都有一个属性,为_id,保证每个文档的唯一性

增删改查
  • 插入:db.集合名称.insert({数据})
    • db.students.insert({“name”:”wukong”,gender:0})
      • key可以不加引号,value需要加引号

  • 查看数据:db.集合名称.find()/db.集合名称.find({})
    • 比较运算符:
      • • 等于,默认是等于判断,没有运算符
      • • 小于$lt
      • • 小于或等于$lte
      • • 大于$gt
      • • 大于或等于$gte
      • • 不等于$ne
      • 查询标题等于”sql”的学科:db.sub.find({title:’sql’})
      • 查找标题不是mongo的:db.sub.find({title:{$ne:’mongodb’}})
    • 逻辑运算符:
      • 逻辑与:逗号连接
      • 逻辑或:$or
      • 查询课时大于或等于10,并且标题为web的学科db.sub.find({count:{$gte:10},title:”web”})
      • 查询课时大于10,或标题为web的学科db.sub.find({or:[{count:{ or:[{count:{ gt:10}},{title:’web’}]})
    • 范围运算符–”$in”
      • 查询课时为8、14的学科db.sub.find({count:{$in:[8,14]}})
    • • 方法limit():用于读取指定数量的文档
      • 查询2条学生信息db.stu.find().limit(2)
    • • 方法skip():用于跳过指定数量的文档
      • 查询从第3条开始的学生信息db.stu.find().skip(2)

  • 更新数据:
    db.集合名称.update(

    ,

    ,

    {

    upsert: <boolean>,
    
    multi: <boolean>
    

    }
    )

    • 参数:
      • • 参数query:查询条件,类似sql语句update中where部分
      • • 参数update:更新操作符,类似sql语句update中set部分
      • • 参数upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
      • • 参数multi:可选,默认是false,表示只更新找到的第一条记录,值为true表示把满足条件的文档全部更新
    • db.stu.update({name:”abc”},{name:’mnc’})修改数据,会破坏原有的结构
    • db.stu.update({name:”abc”},{$set:{name:’mnc’}}) 不会破坏原有结构
    • db.stu.update({},{$set:{name:’mnc’}},{multi:true}) 修改多条数据

  • save
    • 使用save()函数,如果原来的对象不存在,那他们都可以向collection里插入数据,如果已经存在,save会调用update更新里面的记录,而insert则会忽略操作,并且提示报错。
    • insert可以一次性插入一个列表,而不用遍历,效率高,save则需要遍历列表,一个个插入。

  • 删除:
    db.集合名称.remove(
    ,
    {
    justOne:
    }
    )
    • • 参数query:可选,删除的文档的条件
    • • 参数justOne:可选,如果设为true或1,则只删除一条,默认false,表示删除多条

      • db.stu.remove({gender:0},{justOne:true})只删除一条
    • db.stu.remove({}) 全部删除

  • max
    • db.createCollection(‘sub’,{capped:true,size:5,max:3})创建一个名为sub的定长集合,长度为5个字节,可容纳的文档数为3
    • 在robomongo工具中和pymongo模块中:
      capped:封顶,结合size,max:3就是当第3条数据时,再插入数据覆盖之前插入的第1条数据给覆盖了,也就是说最多数据不能超过3条,也就是说数据只能存放3条。
与Python交互:
  • 引入pymongo包
    • from pymongo import MongoClient
  • 链接,创建客户端:
    • 无安全认证:
      • client = MongoClient(‘localhost’, 27017)
      • client=MongoClient(‘mongodb://localhost:27017/数据库名称’)
      • client=MongoClient(‘mongodb://localhost:27017/test1’)
    • 有安全认证:
      • client=MongoClient(‘mongodb://用户名:密码@localhost:27017/数据库名称’)
  • 获取数据库: db=client.数据库名/db=dlient[‘数据库名’]
  • 获取集合:t1=db.集合名/ db.[‘集合名’]

基本操作
- 添加一个文档:s=t1.insert_one({“key”:”value”})
- 修改文档:s=t1.update_one({“name”:”郭靖”},{“$set”:{“name”:”黄蓉”}})
- 删除一个文档:s1 = t1.delete_one({‘name’:’黄药师’})
- 删除多个:s1 = t1.delete_many({‘name’:’黄药师’})

查询
- 查询一个:s1 = t1.find_one({‘name’:’黄蓉’})
- 查询多个:

s1 = t1.find()
print(s1)
for cur in s1:
    print(cur)
s1 = t1.find()
print(s1.next())
print(s1.next())
  • #查询年龄大于18的所以数据:cursor = t1.find({“age”:{“$gt”:18}})
  • 用代码创建数据库test2里面创建集合t2
    • test2 = client[‘test2’]
    • t2 = test2.t2
    • s = t2.insert({“name”:”悟空”})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值