zoukankan      html  css  js  c++  java
  • MongoDB增删改查

    一 . 先说一下mysql和MongoDB对比

    MySql                MongoDB
    
    database    ==        database/db
    table       ==        collection
    colunm      ==        field
    row         ==        documents

    一 . 增

    use   不存在的数据库     #直接创建数据库,但是存在内存中,不在磁盘上
    db.不存在的表名     # 创建表,也是存在内存中
    # 当往表里插入数据的时候就自动写在了磁盘上
    
    db.表名.insertOne({"key":"value"})   #插入一条数据
    db.msg.insertOne({'name':'attila'})
    
    db.表名.insertMany([{"key":"value"},{"key":"value"}])  #插入多条数据
    db.msg.insertMany([{'age':'18'},{'gender':''}])

    二 . 删

    # 删除库
    use 想要删的库   # 先到要删的库下
    db.dropDatabase()
    
    # 删除表(集合)
    use 要删除的表的所在库   # 先找到这个表
    db.表名.drop()
    
    # 如要删除msg库下的student表
    user msg
    db.student.drop()
    
    # 删除表中数据
    db.表名.deleteOne({条件})   # 删除符合条件的第一条数据
    db.表名.deleteMany({条件})   #  删除符合条件的所有数据

    三 . 改

    db.表名.updataOne({'gender':''},{'$set':{'age':23}})   # 只修一条数据, 把最先录入的gender=男的age改成23,如果没有age,直接填上age=23
    db.表名.updataMany({'gender':''},{'$set':{'age':23}})   # 修改所有数据.没有就新增.
    # $set -> set修改器 起到强制覆盖替换的作用
    array+object数据类型的修改方法,如course:[{'name':'python','score':100},{'name':'golang','score':99}]
    # 把name=python的score改为50
    db.表名.updataOne({'course.name':'python'},{$set:{'course.$.score':50}})
    $ -> 意思就是取当前索引,由于array数据类型能自动遍历,所以能直接course.name
    
    # 这里介绍一下修改器
    $set    -> 强制替换覆盖
    $unset  -> 强制删除字段
    db.表名.updata({'age':28},{$unset:{'gende':1})  #直接把age=28的gender字段删掉,后面参数随便给.
    $inc  -> 引用增加
    # db.表名.updata({'name':'attila'},{$inc:{'age':1})   # 先引用在增加,在age=18的基础上加1,也就是age=19了
    
    array操作:
    $push 在array中追加,相当于append  
    db.表名.update({name:"attila"},{$push:{hobby:"看书"}})
    $pushAll  在array中追加列表中的所有元素,相当于extend
    db.表名.update({name:"attila"},{$pushAll:{hobby:["篮球","足球","羽毛球"]}})
    $pull  在array中删除一个元素,相当于remove
    db.users.update({name:"attila"},{$pull: {hobby:"羽毛球"}})
    $pullAll  在array中删除一堆元素
    db.表名.update({name:"attila"},{$pullAll: {hobby:["篮球","足球"]}})
    $pop
    db.users.update({name:"attila"},{$pop: {hobby:1}})     # hobby后面写1或-1,1是删除最后一个,-1是删除第一个.

    四 . 查

    db.表名.find()     # 查询所有数据
    db.表名.find({'age':18})  # 查询所有age=18的
    db.表名.findOne({'name':'attila'})   # 查询一条
    
    # 查询的关键字:
    !!! array数据类型会自动遍历
    $in  或者  
    db.表名.find({age:{$in:[18,24]}})    # 查询age=18或者24的数据,必须是相同字段
    $or 或者 db.表名.find({$or:[{age:18},{name:'attila'}]}) # 查询age=18或者name=attila的数据,可以跨字段
    $all 子集查询 db.表名.find({hobby:{$all: ["篮球"]}}) #查询hobby里面有'篮球'的数据

      带有比较符的查询

    $lt : 小于 
    db.表名.find({age:{$lt:20}})   # 查询年龄小于20的数据
    $lte: 小于等于 
    $gt : 大于 
    $gte: 大于等于 
    $ne : 不等于

    五 . sort(排序), skip(跳过), limit(选取条目)

        这三个的顺序是先排序, 在跳过, 最后筛选

    # sort(排序)  参数为1或者-1
    db.表名.find({}).sort({ age:1 })    # 参数为1,按照从小到大排序
    db.users.find({}).sort({ age:1 , birthday:-1 })   # 先按age从小到大排序,如果age相等,按照birthday从大到小排序.
    # skip(跳过)
    db.表名.find({}).skip(1)   # 跳过一条数据
    
    # limit(筛选)   参数写几查几条,超过最大条数按照最大条数拿
    db.表名.find({}).limit(2)   # 拿出来两条数据,按照插入顺序拿
    
    # 顺序,无论这三个谁先谁后,执行顺序都是先排序,在跳过,最后筛选
    db.表名.find({}).limit(3).skip(2).sort({ age:-1 })
    
    #  分页  如果每页显示10条数据,num=10,那么第1页就是就跳过0条数据,第二页就跳过第1页的10条数据
    db.表名.find({}).limit(num).skip((page-1)*num)

    六 . pymongo

    # 首先要安装pymongo的第三方模块
    from pymongo import MongoClient
    from bson import ObjectId
    
    MC = MongoClient('127.0.0.1',27017)
    MONGODB = MC[库名]
    
    #
    res = MONGODB.表名.insert_one({"name":"attila"})  #  插入一条数据
    print(res.insert_id)  #  拿到的是字符串类型的_id,如果需要以它为条件在mongodb中查询的话,需要用ObjectId强转一下,(见下面的查询)
    MONGODB.表名.insert_many([{"name":"attila"},{"name":"萧峰"}])   # 插入多条数据
    #
    MONGODB.表名.delete_one({"age":18})   # 删除age=18的第一条数据
    MONGODB.表名.delete_many({"gender":''})   #删除所有gender='男'的数据
    #
    MONGODB.表名.update_one({"name":"attila"},{"$set":{"age":18}})   # 把name=attila的第一条数据age改为18
    MONGODB.表名.update_many({"gender":""},{"$set":{"age":50}})  # 把所有gender='男'的数据age改为50
    #
    res = MONGODB.表名.find_one({"_id":ObjectId("5cb6eb7322b9441020186701")})   #查询_id=后面一大串的数据, 
    print(res.get('_id')   # 拿到的是ObjectId数据类型  
    !!! ObjectId不能直接被json,如果想要json化,需要先转成str
    MONGODB.表名.find_many({"gender":""})    # 查询所有gender='男'的数据
    MONGODB.表名.find()   #  拿到的是生成器, 需要遍历才能拿到所有值
  • 相关阅读:
    jquery键盘事件
    如何将奇艺、优酷等平台的视频嵌入到项目中
    ubuntu 10.04 常用 设置
    博客风格收集
    多张图片上传预览
    动态计算输入框字符个数
    Ubuntu Linux下设置IP的配置命令
    js事件浏览器兼容
    开源软件下载站
    PHPstrom的一个小技巧
  • 原文地址:https://www.cnblogs.com/attila/p/10727436.html
Copyright © 2011-2022 走看看