• MongoDB


    Mogodb

    • port:27017,mysql:3306,redis:6379
    • NoSQL 不仅仅只是SQL

    1. mongodb中概念

    1. 使用不存在的对象即创建该对象
    2. Json结构存储。dict用法

    table1-1 mysql和mongodb对比

    称呼 MySQL MongoDB
    数据库 database database
    数据表 Tables Collections(本质是表)
    数据列 Colum Field(字段)
    数据行 Row Documents

    2. 数据类型(8)

    • F6:执行(nosqlbooster-for-mongodb)
    ObjecgtID : Documents 自动生成的 _id,时间戳+机器码(mac地址序列化结果)+PID+计数器(整个数据库的计数器,会共享给server中的其他Mongodb)
    string							# 必须是 utf-8的字符
    Boolean							# true/false
    Integer							# 整数据(int32, int64)
    Double							# 不指定默认是double,所有小数在mongo中都是double,mongodb不存在float
    Array							# 类似python中的 list
    Object							# python中的dict,其他语言都叫object
    Null							# 空
    Timestamp						# 时间戳
    
    db.users.insert({data:ISODate()})
    

    3. 常用操作

    1. 使用数据库

    • 启动数据库
    mongod							# 启动mongodb服务
    mongod --dbpath='/data/db'		# 指定数据库存放路径 /data/db
    mongod --port=27017				# 指定使用的端口号
    mogo							# 启动客户端
    
    • 基本操作
    > show databases				# 查看当前数据库中磁盘中的数据库
    > use dbname					# 切换当前使用的数据库
    > db							# 查看当前使用的数据库,代指当前数据库名
    > use xxx						# use不存在的库,在内存中创建数据库空间,只有数据时,才会存到磁盘中
    > db.users						# users不存在时,在内存中创建数据表空间
    > show tables					# 查看当前数据库中磁盘中的数据表
    

    2. 增删改查

    db.users.insert({})				# 增加数据
    db.users.insert([{name:'henry',age:19}, {name:'echo',age:18}])
    db.users.find()					# 查询当前数据表中的所有数据
    

    3. 条件查询(4)

    • $and:并列条件
    db.users.find({age:19})			# 查询所有符合条件的数据
    db.users.find({name:'henry',age:19}) # 并列方式查询
    
    db.users.find({'$and':[{name:'henry'},{age:19}]})
    
    • $or:或条件
    db.users.find({'$or':[{age:19}, {name:'echo'}]}) 
    
    • $in :包含或者,同一字段或者条件,必须是交集
    db.users.find({age:{'$in':[18, 19, 20]}}) 
    
    • $all:必须是子集
    db.users.find({hobby:[1,2,3,4,5]}) 
    db.users.find({hobby:{'$all':[3,5,1]}}) 
    

    4. 范围查询

    • 数学比较符($gt/lt/get/let/eq/ne)
    db.users.find(age{'$gt':19})
    db.users.find(age{'$lt':19})
    db.users.find(age{'$gte':19})
    db.users.find(age{'$lte':19})
    db.users.find(age{'$eq':19})	# 用在并列、或条件中
    db.users.find(age{'$ne':19})	# 除了age=19的所有数据(没有age字段和age!=19)
    
    • Object查询可以直接使用对象.属性,作为key
      • 当Array中出现Object会自动遍历其中的属性
    db.users.find({hobby:2})
    

    5. 更改update()

    1. db.tablename.update({查询条件}, $修改器:{修改内容})
    2. 查询并修改符合条件的第一条数据
    3. $:修改器(单个字段进行修改)
      1. $set:强制将某值修改覆盖,如果不存在则创建
      2. $unset:强制删除一个字段
      3. $inc:自增
    • 单个对象修改(3个修改器)
    # $set:设置属性
    db.users.update({'name':'echo'}, {'$set':{'name':'dean'}})
    db.users.update({'name':'echo'}, {'$set':{'name':'dean','age':28, 'gender':1}})
    # $unset:删除属性,任意值都会生效
    db.users.update({'name':'echo'}, {'$unset':{'gender':任意值}})
    # $inc:引用属性,增加(-1减少)
    db.users.update({'name':'echo'}, {'$inc':{age:1}})
    
    • 针对$array的修改器,以及 $ 关键字用法和特殊性
      • array--> $push $pull $pop $pushAll $pullAll
      • pop和push的方向是一致的
      • pull 和 pullAll:删除一个值,批量删除
    # $push:追加
    db.users.update({'name':'echo'}, {'$push':{'hobby':123}})
    # $pop:只能删除array第一条(-1)或最后一条(1)的数据
    db.users.update({'name':'echo'}, {'$pop':{'hobby':1/-1}})
    
    # $pushAll:批量增加 (3.6版本被废弃)
    db.users.update({'name':'echo'}, {'$pushAll':{'hobby':[a,b,c]}})
    
    # $pull:删除符合条件的所有元素(python的 remove)
    db.users.update({name:'henry'}, {$pull: {hobby:6}})
    # $pullAll:批量删除符合条件的元素
    db.users.update({'name':'echo'}, {'$pullAll':{'hobby':[3,4,5]}})
    
    • $关键字的特殊用法:保存符合条件的下标。只能存储一层遍历的索引
      • array和object:会发生遍历
      • 此时:'hobby.$ '必须加引号
    db.users.update({'hobby':0}, {'$set':{'hobby.$':123}})
    db.users.update({'hobby':0}, {'$set':{'hobby.9':123}})
    

    6. 删除

    # 删除所有数据
    db.Tables.remove({})
    # 删除一条数据,只删除第一一条
    db.users.remove({}, {justOne: true})
    db.users.remove({name:'oleg'}, {justOne:true})
    

    7. 官方推荐

    • 插入:insertOne和insertMany
    db.tablename.insertOne({'name':'dianel'})
    db.tablename.insertMany({'name':'dianel'},{'name':'oleg'})
    
    • 查询:findOne和find
    # 查询符合条件的第一条数据
    db.tablename.findOne({'name':'dianel'})
    # 查询符合条件的所有数据
    db.tablename.find({'name':'dianel'})
    
    • 修改:updateOne和updateMany
    # 修改符合条件的第一条数据
    db.tablename.updataOne({},{})
    # 更新所有数据,没有则增加
    db.tablename.updataMany({},{'inc':{age:1}})
    
    • 删除:deleteOne和deleteMany
    # 删除符合条件的第一条数据,从头删除
    db.tablename.deleteOne({age:19})
    # 删除符合条件的所有数据
    db.tablename.delete({age:1})
    

    4. 高级函数

    • 排序:sort > 跳过:skip > 筛选:limit (优先级次序,mongodb内部逻辑)
    • count():计算查找到数据的条数
    # 升序排序,-1则为逆序
    db.users.find({}).sort({age:1})
    # 筛选前 -3(n) 条
    db.users.find({}).limit(-3)
    # 跳过前 3(n) 条
    db.users.find({}).skip(3)
    # 顺序任意
    db.users.find({}).skip(4).limit(2)
    db.users.find({}).limit(2).skip(4)
    # 分页
    page = 页码 = 1
    count = 条目 = 2
    db.users.find({}).limit(count).skip((page-1)*count).sort({字段:-1})
    

    5. pymongo

    1. 下载pymongo

    pip install pymongo
    

    2. 使用

    • find_one:pep8规范,下划线命名
    • 如果查询 _id:id值必须带上ObjectId('xxxxxx')
    from pymongo import MongoClient
    from bosn import ObjectId
    MC = MongoClinet('127.0.0.1', 27017)
    MongoDB = MC['study']
    # 插入数据时,返回 inserted_id/inserted_ids
    # 类型是:<class 'bson.objectid.ObjectId'>
    res = MongoDB.Users.insert_one({'name':'iris', 'age':20})
    print(res.inserted_id, type(res.inserted_id))
    # 通过 _id 进行查找
    res = MongoDB.Users.find_one({'_id':ObjectId(res)})
    print(res)
    
    # sursor是一个生成器
    for row in res:
        print(row)
    
    • 批量插入
    res = MongoDB.Users.insert_many([{'name':'iris', 'age':20},{'name':'oleg', 'age':20}])
    # list类型[ObjectId(), ObjectId()...]
    print(res.inserted_ids, type(res.inserted_ids))
    
    • 更新数据
    # 只更新第一条数据
    res = MongoDB.Users.update_one({}, {'$inc':{age:1}})
    # 更新所有
    res = MongoDB.Users.update_many({'age':20}, {'$inc':{age:1}})
    
    • 删除数据
    # 删除第一条数据
    res = MongoDB.Users.delete_one({})
    # 删除所有数据
    res = MongoDB.Users.delete_many({})
    
    • 高级函数
    # 选择 3(n) 条数据
    res = MongoDB.Users.find({}).limit(3)
    for row in res: print(row)
        
    # 跳过 3(n) 条数据
    res = MongoDB.Users.find({}).skip(3)
    for row in res: print(row)
    
    # 排序
    from pymongo import DESCENDING, ASCENDING
    res = MongoDB.Users.find({}).sort('age', DESCENDING)
    res = MongoDB.Users.find({}).sort({'age':-1}) # -1会报错
    for row in res: print(row)
    
  • 相关阅读:
    qt tableview中如何添加右键菜单且不可编辑单元格
    C++typedef struct和struct的区别
    Qt5配置winpCap
    C++虚函数和纯虚函数的用法和区别
    c++11 智能指针 unique_ptr、shared_ptr与weak_ptr
    C++ windows进程间通信
    C++并发多线程(一)
    Maven无法下载2.1.7.js7版本的itext依赖
    PostgreSQL
    SQL
  • 原文地址:https://www.cnblogs.com/henryw/p/11557702.html
Copyright © 2020-2023  润新知