zoukankan      html  css  js  c++  java
  • python笔记-mongodb数据

    一、MongoDB简介

    • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    • MongoDB中将数据存储为一个文档,文档由键值对(key=>value)组成,MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

    • 基于分布式文件存储的开源数据库系统

    • 和关系型数据库一样,MongoDB存在数据库的概念,一个MongoDB可以创建多个数据库。

    • 多个键及其关联的值有序地放置在一起就是文档,文档是MongoDB中数据的基本单元,是MongoDB的核心概念,很类似关系数据库中的行(记录)。

    • 集合就是一组文档的组合,集合可以被看作关系型数据库中的表。

    • MongoDB数据库相关概念与SQL数据库相关概念的对比

      SQL数据库 MongoDB数据库
      Database(数据库) Database(数据库)
      Table(表) Collection(集合)
      Record(记录) Document(文档)

    二、MongoDB概念解析

    SQL术语/概念 MongoDB术语/概念 解释/说明
    database database 数据库
    table collection 数据库表/集合
    row document 数据记录行/文档
    column field 数据字段/域
    index index 索引
    table joins 表连接,MongoDB不支持
    primary key primary key 主键,MongoDB自动将_id字段设置为主键

    三、MongoDB常用操作命令

    3.1 库级命令

    命令 解释
    db 查看当前数据库(默认为test)
    use DATABASE_NAME 切换或创建数据库
    show dbs 显示所用有数据的数据库
    db.dropDatabse() 删除数据库

    3.2 集合的操作命令

    命令 解释
    db.createCollection(name, options) 创建集合
    name: 要创建的集合名称
    options: 可选参数, 指定有关内存大小及索引的选项
    show collections 显示所有集合
    db.connectionName.drop() 删除指定<connectionName>集合

    options选项

    options 类型 描述
    capped 布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
    autoIndexId 布尔 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
    size 数值 (可选)为固定集合指定一个最大值,以千字节计(KB)。 如果 capped 为 true,也需要指定该字段。
    max 数值 (可选)指定固定集合中包含文档的最大数量

    3.3 文档操作命令

    3.3.1 插入数据

    命令 解释
    db.collectionName.insert(document) 插入文档, 集合不存在会自动创建, 不能插入重复_id的数
    db.collectionName.insertOne(document) 插入一条文档
    db.collectionName.insertMany(documents) 插入多条数据

    db.collectionName.insert([<document 1>, <document 2>, ..., <document n>])

    db.collectionName.insertOne(<documnet>, {writeConcern: <document>})

    db.collectionName.insertMany([<document 1>, <document 2>, ..., <document n>], {writeConcern: <document>, ordered: <boolean>})

    参数说明:

    • document:要写入的文档。
    • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
    • ordered:指定是否按顺序写入,默认 true,按顺序写入。

    插入数据示例

    db.student.insert(
    {_id: 0, name:'小薇', age: 20}
    ) # 插入一条数据到student集合
    
    db.student.insert(
    [
    {_id: 1, name:'小明', age: 19},
    {_id: 2, name:'小芳', age: 20},
    {_id: 3, name:'小蓝', age: 21},
    ]
    )  # 插入多条数据
    
    

    3.3.2 查询数据

    命令 解释
    db.collectionName.find(condition) 查询数据
    db.collectionName.find(condition).pretty() 结构化显示

    1. 无条件查询

    db.collectionName.find()  # 无条件查询, 查询出所有数据
    db.collectionName.find().pretty()  # 查询出所有数据并格式化显示
    

    无条件查询示例

    db.student.find()  # 查询出所用数据
    

    2. 条件查询

    条件操作符 说明
    $ne 不等于 !=
    $lt 小于 <
    $gt 大于 >
    $lte 小于或等于 <=
    $gte 大于或等于 >=
    $and:[{expression 1}, {expression_2}, ..., {expression n}] 合取, 且
    $or: [{expression 1}, {expression_2}, ..., {expression n}] 析取, 或

    查询示例

    db.student.find(
    {
    age: {$lt: 20})
    }
    )  # 查询出 age<20 的学生
    
    db.student.find(
    {$and:[{age:{$lt: 20}}, {age: {$gt:18}}]}
    )  # 查询出18 < age < 20的学生
    
    db.student.find(
    {$or:[{age:{$lt: 20}}, {age: {$gt:18}}]}
    )  # 查询出 age < 20 或 age > 18 的学生
    

    3.3.3 更新文档

    命令 解释
    db.collectionName.update(<query>, <update>, {options}) 更新文档
    db.collectionName.save(<document>, {writeConcern: <document>}) 替换已有文档

    语法说明

    db.collectionName.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )
    

    参数说明

    • query : update的查询条件,类似sql update查询内where后面的
    • update : update的对象和一些更新的操作符(如(,)inc...)等,也可以理解为sql update查询内set后面的
    • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
    • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
    • writeConcern :可选,抛出异常的级别
    db.collection.save(
       <document>,
       {
         writeConcern: <document>
       }
    )
    

    参数说明

    • document : 文档数据
    • writeConcern :可选,抛出异常的级别

    命令

    命令 作用
    db.collectionName.update({query}, {update}) 全文档替换
    db.collectionName.update({query}, {$set:{update}) 指定field域修改
    db.collectionName.update({query}, {$set:{update}}, {multi:true}) 更新满足条件的文档

    更新示例

    db.student.update({age: {$lt: 20}}, {sex: "male"})  # 将age < 10学生文档替换为{sex: "male"}
    
    db.student.update({sex:"male"}, {$set:{sex:'female'}})  # 将sex=male的文档修改为sex=female
    
    db.student.update({age:20}, {$set:{sex: "male"}}, {multi: true})  # 将age=20的所有文档中的sex修改为female
    

    3.3.4 删除文档

    命令 解释
    db.collectionName.remove({query}) 删除满足条件的所有文档
    db.collectionName.remove({query}, {justOne:true}) 删除满足条件的第一条数据
    db.collectionName.remove({}) 清空文档, 无条件删除

    删除示例

    db.student.remove({_id:1})  # 删除_id=1的数据
    
    db.student.remove({age: 20}, {justOne:true})  # 删除age=20的第一条数据
    
    db.student.remove({})  # 无条件删除
    

    三、python操作mongodb

    python操作mongodb需要一个第三方接口pymongo提供支持

    3.1 链接mongodb

    import pymongo
    
    client = pymongo.MongoClient()  # 链接mongodb数据库
    
    db = client["db_name"]  # 进入数据库, 没有则创建
    collection = db["collection_name"]  # 选择集合, 没有则创建集合, 返回一个集合对象
    

    3.2 常用方法

    collection是集合对象

    方法 解释
    查询
    collection.find({filter}) 查询满足条件的所有数据
    collection.find_one({filter}) 查询满足条件的第一条数据
    添加
    collection.insert([{document 1}, ...,{document n}]) 添加数据, 多条数以列表添加
    collection.insert_one({document}) 添加一条数据
    collection.insert_many([{document 1}, ...,{document n}]) 添加多条数据
    更新
    collection.update({filter}, {update_document}) 修改满足条件的数据
    collection.update_one({filter}, {update_documnet}) 修改满足条件的第一条数据
    collection.update_many({filter}, {update_document}) 修改满足条件的所有数据
    删除
    collection.delete_one({filter}) 删除满足条件的一条数据
    collection.delete_many({filter}) 删除满足条件的数据
  • 相关阅读:
    L05 Laravel 教程 电商实战
    laravel 5.5 登录验证码 captcha 引入
    thinkphp 清理runtime缓存的方法, 清理指定目录
    艾伟也谈项目管理,项目经理要如何看待技术? 狼人:
    艾伟也谈项目管理,带领团队发挥最大潜能的10个技巧 狼人:
    艾伟也谈项目管理,聊聊我们团队的绩效管理 狼人:
    艾伟也谈项目管理,创建敏捷团队 狼人:
    艾伟也谈项目管理,多任务让你走得更慢 狼人:
    艾伟也谈项目管理,项目经理的思维批判 狼人:
    艾伟也谈项目管理,创业公司技术选型参考 狼人:
  • 原文地址:https://www.cnblogs.com/duyupeng/p/13199820.html
Copyright © 2011-2022 走看看