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}) 删除满足条件的数据
原文地址:https://www.cnblogs.com/duyupeng/p/13199820.html