mongodb

MongoDB:非关系型数据库

1.介于关系型数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富的
2.MongoDB和关系型数据库最大的区别就是约束性,没有主键约束和数据类型约束等
    1.MongoDB,作为优秀的非关系型数据库,更适合于存储文档等非结构型数据。彼此独立的文档更适合于使用mongoDB存储
    2.查询功能比较强大,擅长查询JSON数据,能存储海量数据,但是不支持事务,对于CPU占用非常小
    3.MongoDB支持一个upsert选项,即:“如果记录存在那么更新,否则插入”。MongoDB的update方法还支持Modifier
    通过Modifier可实现在服务端即时更新,省去客户端和服务端的通讯
3.应用场景:数据表结构变化较为频繁,数据量特别大
4.内存管理机制
    Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据。
    MongoDB数据存在内存,由linux系统mmap实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
MongoDB的数据结构:

User=[
    {
        name="zhao",
        age=18,
        'gender':"man"
    },
    {
        name="ruby",
        age=18,
        'gender':"woman"
    },
] 
MongoDB的每个表(Collection)中存储的每条数据(Documents)都是一个一个的Json,Json中的每一个字段(Key)我们称之为:Field

MongoDB的增删改查操作

开启的端口:27017
把安装包中的bin文件路径添加到环境变量
1.开启服务端:在cmd输入:mongod   需要新建C:\data\db\
2.开启客户端:mongo
创建数据库和表
数据库:
    1.创建并使用数据库:use
        use zhaoguangfei (数据库不存在就新建,存在就使用)
        查看当前数据库:db
    2.查看所有的数据库:show dbs   
    3.删除数据库:db.dropDatabase()
数据表:
    1.创建表:db.jerd
    2.查看:show tables
    2.删除表:db.jerd.drop()

增,删,改,查操作
1.添加
    1.insert:插入一条或者多条。不再推荐
              一条:db.jerd.insert({"name":"ruby"})
              多条:db.jerd.insert([{"name":"go"},{"name":"ruby"}])
    推荐的写法,和insert的返回值不同
    1.insertOne:插入一条,
                db.jerd.insertOne({"name":"ruby"})
    2.insertMany:插入多条
                 db.jerd.insertMany([{"name":"go"},{"name":"ruby"}])
2.查询(find,findone)
    1.find() 将该表中所有符合条件的数据全部返回
    2.findOne() 查找一条数据,有多条数据符合条件的话,只返回最靠前的那条数据
        db.jerd.findOne({"name":"go"})
3.修改数据
    ({"条件"},{"关键字":{"修改内容"}})
    1.update:不推荐 如果条件为空,会修改所有的数据
    推荐的写法:
    1.updateOne:修改一条数据的内容
        db.jerd.updateOne({"name":"go"},{$set:{"name":"ruby"}})
    2.updateMany:多条修改
        db.jerd.updateMany({"name":"ruby"},{$set:{"name":"Ruby"}})
4.删除数据:
        不推荐:1.remove 删除所有的数据
                 db.jerd.remove()
               2.remove({"name":"Ruby}) 删除满足条件的所有数据
                db.jerd.remove({"name":"Ruby}
        推荐的写法:
        1.deleteOne
            db.jerd.deleteOne({"name":"Ruby"})
        2.deleteMany 删除所有满足条件的数据
            db.jerd.deleteMany({"name":"Ruby"})

MongoDB的数据类型

1.Object ID :Documents自生成的_id 无法被序列化 需要转换为str
2.String :字符串,必须是utf-8
3.Boolean:布尔值 true或false
4.Integer:整数
5.Double:浮点数(没有float类型,所有的小数都是Double
6.Arrays:数组或者列表
7.object:python中的字典
8.Null 空数据类型 none null
9.Timestamp 时间戳
10.Date 当前时间

update操作之修饰器$

修改器 $inc $set $unset $push $pull $pop
    "$"  在 update中加上关键字 就 变成了 修改器
    $ 字符代表下标,位置 使用update的话,满足条件的数据下标位置就会传递到$字符中
    $ 只储存一个下标
    1.$inc 将查询到的结果加上某个值,然后保存
     db.jerd.updateMany({"username":"jerd"},{$inc:{"age":1}})
     减法操作:
     db.jerd.updatemany({"username":"jerd"},{$inc:{"age":-1})
    2.$set:1.修改指定的 Field 字段
            2.字段不存在就新建

    3.$unset:用来删除Field
    db.jerd.updatemany({"username":"jerd"},{$unset:{"english":1})
    {$unset:{"english" : 1}} 就是删除 "english" 这个 field
    4.$push
    用来对Arry(list)尾端数据进行增加新数据
    db.jerd.updatemany({"username":"jerd"},{$push:{"test_list":6})
    5.$pull:制定删除Array中的某一元素
    如果Array中有多个6,会全部删除
    db.jerd.updatemany({"username":"jerd"},{$pull:{"test_list":6})
    6.$pop 删除指定的Array中的第一个或者最后一个元素
    删除最后一个元素:
        db.jerd.updateMany({"username":"jerd"},{$pop:{"test_list":1}})
    删除第一个元素:
        db.jerd.updateMany({"username":"jerd"},{$pop:{"test_list":-1}})

MongoDB的查询操作之关键字

1.关键字:$lt $gt $gte $in
    1.$lt 小于
    db.jerd.find({"sorce":{$lt:80}})
    2.$gt 大于
    db.jerd.find({"age":{$gt:20}})
    3.$gte 大于等于
    db.jerd.find({"age":{$gte:20}})
    4.$lte 小于等于
    db.jerd.find({"age":{$lte:25}}
    5.or
    db.jerd.find({id:{$in:[100,200,300]}})
    6.and
    db.jerd.find({id:{$gt:100,$lt:200}})

MongoDB的查询操作之limit skip sort

db.jerd.insertMany(
                  [{"name":"python","price":19800},
                    {"name":"go","price":17800},
                    {"name":"linux","price":16800},
               ])

1.limit 从第一条开始获取,指定获取的个数
获取前两条:
    db.jerd.find().limit(2)
2.skip 跳过指定的个数
获取第三条:
    db.jerd.find().skip(2)
limit和skip结合
获取第二条和第三条数据
    db.jerd.find().skip(1).limit(2)
3.sort排序:
    升序:
        db.jerd.find().sort({"price":1})
    降序:
        db.jerd.find.sort({"price":-1})
选取第二条第三条 并 按照 price 进行 升序排列
db.jerd.find().skip(1).limit(2).sort({"price":1})
结果:
    {"name":"go","price":17800},
    {"name":"python","price":19800},
按照执行应该是:
    {"name":"linux","price":16800},              
    {"name":"go","price":17800},
重点: Sort + Skip + Limit 是有执行优先级的 
      优先 Sort 其次 Skip 最后 Limt

 

对Array Object的查询操作

{
    "name" : "jerd",
    "price" : [
        19800,
        19500,
        19000,
        18800
    ],
    "other" : {
        "start" : "2018年8月1日",
        "start_time" : "08:30",
        "count" : 150
    }
}
Array操作:
    {"username":"jerd","test_list":[1,2,3,4,5],"price":[19800,19500,19000,18800]}
    1.将test_list中的第一个元素改成6
        db.jerd.updatemany({"username":"jerd"},{$set:{"test_list.0":6})
    2.保存满足条件的元素的下标。不知道某个元素的下表时
    db.jerd.updateOne({"price":{$get:1900}},{$inc:{"price.$":-100}})
    3.混合用法,如果price.1小于19800,就加200
    db.jerd.updateOne({"username":"jerd","price.1":{$lt:19800}},{$inc:{"price.1":200}})   
Object操作:
1.把other中 count 改为 199
db.jerd.updateOne({"username":"jerd"},{$set:{"other.count":199}})
注意:如果没有"other.count"这个field的话,会自动创建
{
    "name" : "jerd",
    "price" : [
        {
            "start_time" : "08:30",
            "count" : 150
        },
        {
            "start_time" : "09:30",
            "count" : 160
        },
}
把count大于160的field加 15
db.jerd.updateOne({"username":"jerd","price.count":{$gt:160}},{$inc:{"price.$.count":15}})

在python中操作mongodb pymongodb

连接pymongo

1.pip install pymongo==3.1.1
2.from pymongo import MongoClient
client = MongoClient('localhost', 27017)
3.选择制定的数据库
db=client.story
4.选择操作的表 db.video

#增删改查

1.增:
    单条:insert_one()
    多条:insert_many()
2.删除:
    单条:delete_one
    所有满足条件的:delete_many
改: 
    单条:update_one
    所有:update_many
2.查
    单条:find_one()
    所有:find()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值