MongDB的介绍

MongDB的介绍

一.初识MongoDB

1.1 MongoDB简介
  • MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
1.2 数据库的对比
  • 关系型数据库的表

在这里插入图片描述

  • 非关系型数据库的表

    数据库,nosql
    
    	[{
    
    		id:1
    
    		name:"蔡文姬"
    
    		age: 16
    
    		gender:"女"
    
    	},
    
    	{
    
    		id:1
    
    		name:"蔡文姬"
    
    		age: 16
    
    		sex:["女","girl","老阿姨"]
    
    		other:{
    
    			hobby:["男","boy","小哥哥"]
    
    		}
    
    	}]
    
  • 表的对应关系

    ​ table Collections 表
    row Documents 数据条目
    column Field 字段

  • 总结

    它和我们使用的关系型数据库最大的区别就是约束性,可以说文件型数据库几乎不存在约束性,理论上没有主外键约束,没有存储的数据类型约束等等

    表的对应关系与关系型数据库相似,但MongoDB的一条数据就是一个json字符串

二. Mongo的安装

  • 下载文件MongoDB 3.4的msi安装包

  • 将安装文件的bin目录加入环境变量

  • 在与bin目录同级目录下建data目录,然后data目录下建db目录

  • 在管理员cmd中输入mongod,启动服务端(不要关闭)

  • 启动客户端可以用mongo,端口为27017

三 MongoDB数据类型

Object ID :Documents 自生成的 _id 并且 不支持转换成JSON字符串
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类型,时间戳可以秒杀一切时间类型)

objectID的详解:
{"_id" : ObjectId(“5bda5293c6c72e52ffc7e91e”)}

​ 0-8字节是时间戳,
9-14字节的机器标识符,表示MongoDB实例所在机器的不同;
15-18字节的进程id,表示相同机器的不同MongoDB进程。
19-24字节是计数器

四. mongo的原生orm

1.1 创建表的注意
  • db为查询当前所在的数据库
  • use 为进入该数据库,使用该库就会自动创建该数据库
  • show dbs 查询所有在磁盘的数据库,没有数据的库在内存中,查看不到
  • db.user 不存的对象,则创建该对象
1.2 数据具体操作
insert:
	db.users.insertMany([{"name":"金王吧"},{"name":"egon"}])  #插多个值
    db.users.insertOne({"name":"刘sir"})  #只能插入一个值

remove:
	db.users.deleteOne({"age":30})  # 删除一个值
	db.users.deleteMany({"age":30})  # 删除多个值
	
update:
	db.users.updateOne({},{$set: {"cursors":"FullStack"}})  #匹配多个只更新一个.set如果有值修改,么有值添加
	db.users.updateMany({},{$set: {"cursors":"FullStack"}}) #更新到匹配的全部
	
find:
	db.users.find({}) # 查出所有符合条件的
	db.users.findOne({}) #只查出一个符合条件的

五 MongoDB之特殊$符与修改器



数学比较符:
$lt: <
$lte: <=
$gt: >
$gte: >=
$eq;==
: : == or = 建议使用

db.user.find({"score":{$gt:80}})




$:

存储满足条件的数据下标索引位置

db.users.updateOne({"other.name":"linux","name":"银网吧"},{$set:{"other.$.score":19}})

# 也可以直接写索引来获取值

弊端:[
	[1,2,3],
	[{k:{zk:zv}},{k2:v2},{k3:v3}],
	[4,5,6],
]  #只能写一个$ 不能查询多层


$关键字 查询:

$or : db.users.find({$or:[{age:18},{name:"银网吧"}]})  #符合其中一个条件就返回

$and : ,,一样表示同时符合多个条件

$in : db.users.find({age:{$in:[18,84,73]}})  #年龄在这个数组中的就返回
 
$all : db.users.find({hobby:{$all:[1,2,3,4,5,6]}})  # 报含数组中所有的值就返回


$修改器 update:

$set: 直接将字段的值设定为value

$unset: 删除选中的字段

$inc: 原值增加 db.users.updateMany({name:"金王吧"},{$inc: {cursors: 1}})

$array修改器:

$push : append(item) db.users.updateMany({name:"金王吧"},{$push: {hobby:10}}) #往列表中添加一个值

$pull : remove(item) db.users.updateMany({name:"金王吧"},{$pull: {hobby:10}})# 删除一个值

$pop : pop() db.users.updateMany({name:"金王吧"},{$pop: {hobby:-1}})  1最后一个 -1第一个

skip limit sort的用法:

limit : db.users.find({}).limit(2) #显示条目数量

skip : db.users.find({}).skip(1) #跳过条目数量

简单分页 :db.users.find({}).limit(当前页码*每页条目).skip(每页条目)

sort :db.users.find({}).sort({ age:1 }) 1:ASC升序 -1:DESC降序

分页排序多重用法:

db.users.find({}).sort({ age:-1 }).limit(2).skip(2)

	

六 python中MongoDB的使用

6.1 mongo的连接与创建
# 先下载pymongo包   pip3 install pymongo

import pymongo

mongo = pymongo.MongoClient("127.0.0.1",27017)  #建立本地的连接

mb = mongo["user"]  #user为数据库名称

6.2 mongoDB的基本使用
# 查询数据:

mb.student.find({})  # 返回的是一个生成器
mb.student.find_one({}) #返回的是一个字典

# 增加数据:

mb.student.insert_one({})  #有返回值,res.inserted_id 拿出id值
mb.student.insert_many([{},{}]) #有返回值,res.inserted_ids 返回一个id的数组

# 删除数据:

mb.delete_one({}) #一条数据全部删除
mb.delete_many({})  #删除所有的数据,表还在
drop() #表也会删除

# 修改数据

mb.update_one({查询条件},{"$set":{"name":"lin"}})  #将查询到的一条数据进行修改,没有增加
mb.update_many({查询条件},{"$set":{"name":"lin"}}) #将所有查询到的数据进行修改,没有增加

# 排序分页

mb.sort("age",pymongo.AECENDING) #升序
pymongo.DESCENDING #降序
#其实这里换成1 或者-1 也可以





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值