• mongodb初识


    http://www.mongodb.org.cn/manual/aggregation-group/

    1.启动
    mongod - 改变data/db位置: --dbpath D:datadb
    mongod --install 安装windows系统服务
    mongod --remove 卸载windows系统服务
    mongo 打开客户端 cmd 窗口
    NoSQLBooster4mongodb

    mongod --dbpath=D:appmongodb3.4datadb #启动

    丰富多彩的数据类型世界
    首先我们要先了解一下MongoDB中有什么样的数据类型:
    
    Object  ID :Documents 自生成的 _id
    
    String: 字符串,必须是utf-8
    
    Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
    
    Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
    
    Double:浮点数 (没有float类型,所有小数都是Double)
    
    Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
    
    Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
    
    Null:空数据类型 , 一个特殊的概念,None Null
    
    Timestamp:时间戳
    
    Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

    2.概念
    - 使用了不存在的对象即创建该对象
    - use db 创建或切换当前数据库 内存中
    - db.tablename 创建或使用 tablename 内存中

    db.dropDatabase(); 删除库

    3.指令
    db 查看当前使用的数据库
    show databases 查看存放在磁盘上的数据库
    show tables 查看当前数据库在磁盘上存储的数据表 - Collection


    4.增删改查
    增加数据:
    官方不推荐:
    db.tablename.insert([{}]) 增加数据
    官方推荐:
    db.tablename.insertOne({}) 增加一条数据
    db.tablename.insertMany([{}]) 增加多条数据

    db.oldboy.insertOne({"name":"2131","age":20})

    db.oldboy.insertMany([{"name":"zaizai"},{"name":"wusir2","age":20}])

    > db.oldboy.insertMany([{"name":"Linux","score":59},{"name":"Python","score":100},{"name":"Go","score":80}])

    查询数据:

    db.oldboy.find() 查询所有
    db.tablename.find({查询条件}) 查询所有符合条件的数据
    db.tablename.findOne({查询条件}) 查询符合条件的第一条数据

    > db.oldboy.find({'age':20})
    { "_id" : ObjectId("5cc429c3b604842e45e52b73"), "name" : "2131", "age" : 20 }
    { "_id" : ObjectId("5cc42ab2b604842e45e52b75"), "name" : "wusir2", "age" : 20 }

    > db.oldboy.findOne({'age':20})
    {
    "_id" : ObjectId("5cc429c3b604842e45e52b73"),
    "name" : "2131",
    "age" : 20
    }

    修改数据:
    官方不推荐:
    db.tablename.update({条件},{修改器:{修改值}}) 修改符合条件的第一条数据
    官方推荐:
    db.tablename.updateOne({条件},{修改器:{修改值}}) 修改符合条件的第一条数据

    > db.oldboy.updateOne({"age":20},{$set:{"name":"1111"}})
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

    db.tablename.updateMany({条件},{修改器:{修改值}}) 修改符合条件的所有数据

    > db.oldboy.updateMany({"age":20},{$set:{"name":"1111"}})
    { "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 1 }
    > db.oldboy.find()
    { "_id" : ObjectId("5cc429c3b604842e45e52b73"), "name" : "1111", "age" : 20 }
    { "_id" : ObjectId("5cc42ab2b604842e45e52b74"), "name" : "zaizai" }
    { "_id" : ObjectId("5cc42ab2b604842e45e52b75"), "name" : "1111", "age" : 20 }

    删除数据:
    官方不推荐:
    db.tablename.remove({条件}) 删除所有符合条件的数据
    官方推荐:
    db.tablename.deleteOne({条件}) 删除符合条件的第一条数据

    > db.delete.deleteOne({'name':'zaizai'})
    { "acknowledged" : true, "deletedCount" : 0 }

    db.tablename.deleteMany({条件}) 删除所有符合条件的数据

    db.delete.deleteMany({'name':'zaizai'})

    5.修改器:

    $set 强制修改 {$set:{name:123}} 强制将name字段的值修改为123 可以创建字段

    db.Oldboy.updateOne({"score":20},{$set:{"score":59}})  #把 "score" 为 20 分的 "score" 赋值为 59 分

    $unset 删除字段 {$unset:{name:1}} 强制删除name字段

    $inc 引用增加 {$inc:{age:1}} 对age字段引用增加 原有数值基础上增加 1


    Array
    $push 相当于列表数据类型的append 追加数据 {$push:{array:"666"}}

    db.Oldboy.update({},{$set:{"test_list":[1,2,3,4,5]}})

    db.oldboy.updateMany({"name":"zaizai"},{$pushAll: {"test_list":[7,8,9]}})

    $pushAll extend 遍历列表循环追加数据 {$pushAll:{array:["666",777,888]}}#最加多个

    $pull 相当于列表数据类型的remove 删除Item {$pull:{array:"666"}}

    db.Oldboy.updateMany({"score":59},{$pull:{"test_list":6}})#注意先有push

    db.oldboy.updateMany({"name":"zaizai"},{$pushAll: {"test_list":[11,22,33]}})

    $pullAll 遍历列表循环删除数据 {$pullAll:{array:["666",777,888]}}

    $pop 相当于列表数据类型的pop(0/-1) 只能删除第一个和最后一个 {$pop:{array:1/-1}}

    db.Oldboy.updateMany({"score":59},{$pop:{"test_list":-1}})

    1 : 删除最后一个
    -1:删除第一个

    6.$ 特殊用法:
    db.tablename.updateOne({hobby:"娟儿"},{$set:{"hobby.$":"小圈儿"}})
    存储符合条件元素的下标索引

    把其中一个爱好为娟的改成小圆圈

    7.$关键字

    "$"  在 update 中 加上关键字 就 变成了 修改器

    其实 "$" 字符 独立出现也是有意义的 , 我起名叫做代指符

    把 "score": 100 的 test_list 里面的 2 改为 9

    > db.Oldboy.find()
    { "_id" : ObjectId("5b990189430c27444ccdd650"), "name" : "Linux", "score" : 100, "test_list" : [ 2, 3, 4 ] }
    db.Oldboy.updateOne({"score":100},{$set:{"test_list.0":9}})

    把9还原成2

    db.Oldboy.updateMany({"score":100,"test_list":9},{$set:{"test_list.$":2}})

    $lt 小于

     db.Oldboy.find({"score":{$lt:80}})

    $gt

    $lte
    $gte
    $ne 不等于
    $eq or : 等于

    $in {hobby:{$in:["娟儿","小圈儿"]}} 相同字段 or

    db.oldboy.find({'name':"Go","score":80}) #不用加in的

    > db.oldboy.find({"name":{$in:["Linux","Go"]}})#查询一个键的多个值
    { "_id" : ObjectId("5cc457e4b604842e45e52b76"), "name" : "Linux", "score" : 59
    { "_id" : ObjectId("5cc457e4b604842e45e52b78"), "name" : "Go", "score" : 80 }

    $or {$or:[{hobby:"娟儿"},{age:84}]} 不同字段间的 or

    db.oldboy.find({$or:[{"score":80},{'score':333}]})#满足任意 $or 条件的数据,至少要满足一个

    $all {hobby:{$all:["娟儿","小圈儿"]}} 跟in一个吊样

    $and or , {$and:[{hobby:"娟儿"},{age:84}]} 并列条件 之 $and

    8.sort skip limit
    1.排序 sort  .sort({"price":-1})

    db.Oldboy.find().sort({"price":1}) 升序

    db.Oldboy.find().sort({"price":-1}) 降序序

    2.跳过 skip  .skip(2)

    3.选取 limit  .limit(2)

    db.Oldboy.find().limit(2)

    分页:
    db.tablename.find({}).sotr(_id:-1).limit(num).skip((page-1)*num)

    $inc 将查询到的结果 加上某一个值 然后保存
    db.Oldboy.updateOne({"score":59},{$inc:{"score":1}})
    db.Oldboy.updateOne({"score":60},{$inc:{"score":-40}})

    经典实例

    如果 price.1 中小于19800 则加 200

    db.Oldboy.update({"name":"路飞学城-骑士计划","price.1":{$lt:19800}},{$inc:{"price.1":200}})

    复习一下:"price.1":{$lt:19800} 是查找 price.1 小于 19800

    复习两下:{$inc:{"price.1":200}} 是什么啊? price.1 拿出来 加上 200 之后 再存进去

    上节课我们也学习了 $ 的用法,现在我们混搭 $ 再做一个练习

    我们把 price 小于 19500  的 自动补上 200

    > db.Oldboy.update({"name":"路飞学城-骑士计划","price":{$lt:19500}},{$inc:{"price.$":200}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.Oldboy.find()
    { "_id" : ObjectId("5b990568430c27444ccdd653"), "name" : "路飞学城-骑士计划", "price" : [ 19800, 19700, 19500, 18800 ], "other" : { "start" : "2018年8月1日", "start_time" : "08:30", "count" : 150 } }

    $ 这个只储存一个下标 所以第二个没改

    把 count 大于 180 的 start 改为 "2018年8月10日"

    db.Oldboy.update({"price.count":{$gt:180}},{$set:{"price.$.start":"2018年8月10日"}})

    9.MongoDB偷换的概念
    MySql MongoDB
    DataBase == DataBase
    Table == Collection
    Colunm == Field
    Row == Documents

    模块 pymongo

    pip install pymongo

    连接

    新建一个文件 test_mongo.py

    复制代码
    import pymongo
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    res = mongo_db.goods.find()
    print(res)

    插入数据

    import pymongo
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    # 插入多条数据
    res = mongo_db.goods.insert_many([{"name" : "酸菜","price" : "1"},{"name" : "白菜","price" : "2"},{"name" : "小青菜","price" : "0.5"},])
    print(res)

    复制代码
    import pymongo
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    # 插入多条数据
    res = mongo_db.goods.insert_many([{"name" : "酸菜","price" : "1"},{"name" : "白菜","price" : "2"},{"name" : "小青菜","price" : "0.5"},])
    print(res)
    复制代码

    执行输出:

    <pymongo.results.InsertManyResult object at 0x00000143817B3548>

    查询数据

    可以将结果转换为列表

    import pymongo
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    # 插入多条数据
    res = mongo_db.goods.find()
    print(list(res))
    复制代码
    import pymongo
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    # 插入多条数据
    res = mongo_db.goods.find()
    print(list(res))
    复制代码

    执行输出:

    [{'_id': ObjectId('5b991895e125324a58178dd3'), 'name': '酸菜', 'price': '1'}, {'_id': ObjectId('5b991895e125324a58178dd4'), 'name': '白菜', 'price': '2'}, {'_id': ObjectId('5b991895e125324a58178dd5'), 'name': '小青菜', 'price': '0.5'}]

    也可以对结果做for循环

    import pymongo
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    # 插入多条数据
    res = mongo_db.goods.find()
    for i in res:
        print(i)

    执行输出:

    {'_id': ObjectId('5b991895e125324a58178dd3'), 'name': '酸菜', 'price': '1'}
    {'_id': ObjectId('5b991895e125324a58178dd4'), 'name': '白菜', 'price': '2'}
    {'_id': ObjectId('5b991895e125324a58178dd5'), 'name': '小青菜', 'price': '0.5'}

    查询单条

    import pymongo
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    # 插入多条数据
    res = mongo_db.goods.find_one()
    print(res)

    由于_id是ObjectId对象,需要导入模块

    import pymongo
    from bson import ObjectId
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    # 插入多条数据
    res = mongo_db.goods.find({"_id":ObjectId("5b991895e125324a58178dd5")})
    for i in res:
        print(i)
    # 插入多条数据
    res = mongo_db.goods.insert_many([{"name" : "酸菜","price" : "1"},{"name" : "白菜","price" : "2"},{"name" : "小青菜","price" : "0.5"},])

    执行输出:

    {'_id': ObjectId('5b991895e125324a58178dd5'), 'name': '小青菜', 'price': '0.5'}

    更新

    import pymongo
    from bson import ObjectId
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    
    res = mongo_db.goods.update_one({"name":"小青菜"},{"$set":{"price":2}})
    print(res)
    复制代码
    import pymongo
    from bson import ObjectId
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    
    res = mongo_db.goods.update_one({"name":"小青菜"},{"$set":{"price":2}})
    print(res)

    执行输出:

    <pymongo.results.UpdateResult object at 0x000001AF61E332C8> None

    删除

    import pymongo
    from bson import ObjectId
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    
    res = mongo_db.goods.delete_one({"name":"小青菜"})
    print(res,res.raw_result)

    执行输出:

    <pymongo.results.DeleteResult object at 0x000001825B2134C8> {'n': 0, 'ok': 1.0}

    排序

    import pymongo
    from bson import ObjectId
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    
    res = mongo_db.goods.find({}).skip(1).limit(2)
    print(list(res))
    复制代码
    import pymongo
    from bson import ObjectId
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    
    res = mongo_db.goods.find({}).skip(1).limit(2)
    print(list(res))
    复制代码

    执行输出:

    [{'_id': ObjectId('5b991895e125324a58178dd4'), 'name': '白菜', 'price': '2'}]

    进阶

    import pymongo
    from bson import ObjectId
    
    # 连接数据库
    mclient = pymongo.MongoClient(host="127.0.0.1", port=27017)
    mongo_db = mclient["testdb"]  # 切换数据库,不存在则创建
    
    
    res = mongo_db.goods.find({}).sort("age",pymongo.DESCENDING)
    #
    res = mongo_db.goods.find({}).sort("age",pymongo.DESCENDING).skip(1).limit(2)
    print(list(res))

    执行输出:

    [{'_id': ObjectId('5b991895e125324a58178dd3'), 'name': '酸菜', 'price': '1'}, {'_id': ObjectId('5b991895e125324a58178dd4'), 'name': '白菜', 'price': '2'}]
  • 相关阅读:
    第1年4月22日 IBInspectable巧妙用法 cornerRadius
    第1年4月15日
    第1年4月9日 Domain: com.apple.dt.MobileDeviceErrorDomain
    第1年4月7日 活体检测
    GPS 波段信号范围
    tomcat远程调试
    JdbcTemplate或hibernate动态建表
    jdk动态代理失效,事务自调用失效
    Tomcat 访问静态资源出现中文乱码解决办法(转)
    SQL Server 查看死锁进程(转)
  • 原文地址:https://www.cnblogs.com/zaizai1573/p/10743477.html
Copyright © 2020-2023  润新知