MongoDB文件型数据库

初始MongoDB

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

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

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

关系型数据库中有一个 "表" 的概念,有 "字段" 的概念,有 "数据条目" 的概念

MongoDB中也同样有以上的概念,但是名称发生了一些变化,严格意义上来说,两者的概念即为相似,但又有些出入,不过无所谓,我们就当是以上概念就好啦

文件型数据库和关系型数据库的区别

文件型 - MongoDB
User:
[
    {id:1,name:"蔡文姬",age:16,gender:"女"},
    {id:2,name:"嫦娥",age:16,gender:"女"},
    {
        id:3,
        name:"孙悟空",
        age:16,
        gender:"女"
    },
    {
        id:"四",
        name:123,
        age:"十六",
        gender:1,
        hobby:["篮球","于谦","羽毛球","双色球”]
    }
]

MySQL MS - MySQL Ux
User:
ID            name        age            gender        hobby
1            蔡文姬          16           女          null
2            嫦娥          9999            女           null
3            孙悟空         8888           男          null

MongoDB数据库的优势

MongoDB的优点:
    操作简单方便易懂,更加接近程序员操作,原生语法ORM,因为是非关系型数据库,没有结构限制,扩展性很强

不同数据库对应的不同端口号:
    Redis    6379
    MYSQL    3306
    MongoDB  27017

MongoDB数据库的安装方式

1.需要百度搜索进入官网进行下载安装包
2.打开安装包进行安装到自己的指定路径下
3.找到/bin目录,将路径配置到电脑的环境变量下
4.配置好环境变量后,需要指定一个盘创建文件夹/data/db,创建好后,需要输入mongod --dbpath "相关/data/db文件夹的存放路径"命令
5.输入完成后,CMD界面会保持再那里不变,需要再开启一个cmd界面
6.输入 mongo  命令,进入成功后,再输入db命令即可查看mongodb安装好的数据库7.之后我们再进行开启数据库就需要输入 mongod --dbpath "相关/data/db文件夹的存放路径"命令即可

不安装相关data/db文件夹路径的报错信息

MongoDB的增删改查操作

mongodb的基本操作命令

db   --当前使用的数据库,查看名称,代指当前使用的数据库
show databases  --查看当前服务器磁盘上的所有数据库
use dbname  --切换当前使用的数据库,或者再内存中创建一个新的数据库赋值给db
show tables --查看当前数据库中的所有磁盘中的表
db.tablename  --使用当前数据库中的tablename表,在内存中创建表
(使用不存在的对象即为创建对象)

MongoDB的增

创建一个Collection数据库

往表(Collection)中添加一条数据

db.Collection.insert({name:123}) #在磁盘中写入数据{name:123}
db.Collection.insert({name:"黄尚"},{name:‘晖飞‘})#在磁盘中写入多条数据insert     insertOne     insertMany(官方推荐操作)

 insertedId是增加数据的 _id ObjectId
 insertedIds是增加数据的_id ObjectId 列表 [ObjectId(),ObjectId()]

MongoDB的查

db.Collection.find({查询条件})#查询所有符合条件的数据

其中的:"_id":ObjectId,就是MongoDB自动给我们添加到系统唯一标识"_id" 是一个ObjectId 类型

findOne()无条件查找一条数据,默认当前Collection中的第一条数据

findOne({age:19}) : 条件查找一条age等于19的数据,如有多条数据则返回更靠前的数据

MongoDB的改

update({"name":"DragonFire"},{$set:{"age":21}}):根据条件修改该条数据的内容(其中如果条件为空,那么将会修改Collection中所有的数据)

updateOne({"age":19},{$set:{"name":"WSSB"}}):根据条件修改一条数据的内容,如出现多条,只修改最高前的数据

updateMany({"age":19},{$set:{"name":"pig_qi"}}):根据条件修改所有数据的内容,多条修改

$set 是update时的关键字,表示我要设置字段属性的值,如果该条Documents没有name属性,他就会自动创建一个相关属性并赋值

MongoDB的删

remove({}):无条件删除数据,这里要注意了,这是删除所有数据,清空Collection

remove({"name":"DragonFire"}) : 条件删除name等于"DragonFire"的所有Document

db.tablename.drop():删除表格

db.dropDatabase():删除库

db.tablename.deleteOne():删除符合条件的第一条数据

db.tablebname.deleteMany():删除所有符合条件的数据

(做此操作前一定要三思而后行)

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类型,时间戳可以秒杀一切时间类型)

Object ID

"_id" : ObjectId("5b151f8536409809ab2e6b26")

#"5b151f85" 代指的是时间戳,这条数据的产生时间
#"364098" 代指某台机器的机器码,存储这条数据时的机器编号
#"09ab" 代指进程ID,多进程存储数据的时候,非常有用的
#"2e6b26" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
#以上四种标识符拼凑成世界上唯一的ObjectID
#只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
#可以得到以上四种信息

#注意:这个类型是不可以被JSON序列化的

String

UTF-8字符串,记住是UTF-8字符串

Boolean

true or false 这里首字母是小写的

Integer

整数 (Int32 Int64 一般我们用Int32)

Double

浮点数 (MongoDB中没有float类型,所有小数都是Double)

Arrays

数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦

Null

空数据类型 , 一个特殊的概念,None Null

Timestamp

时间戳

Date

存储当前日期或时间格式 (我们一般很少使用这个Date类型,因为时间戳可以秒杀一切时间类型)

MongoDB数据库的$ 字符特殊用法

数学比较符

    $lt             小于
    $lte            小于等于
    $gt             大于
    $gte            大于等于
    $eq :         等于
    $ne           不等于                     

$修改器 + $ 字符特殊用法

$inc : Python中的  变量 += 1 , 将查询到的结果 加上某一个值 然后保存

还可以增加负数,就是相减

$set : 把 "score" 为 100 分 的 "english_name" 赋值为 "LuffyCity"

把 "score" 为 20 分的 "score" 赋值为 59 分

$unset : 用来删除Key(field)的

$push : 它是用来对Array (list)数据类型进行 增加 新元素的,相当于我们Python中 list.append() 方法

$pushAll == extend()(相当于python当中的exend方法,将表中的元素一个一个的添加上去)

$pull : 有了$push 对Array类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array中的某一个元素

如果 Array 数据类型中 如果有 多个 6,就会全部删除(只要满足条件,就会将Array中所有满足条件的数据全部清除掉)

$pullAll==删除根据exend创建的

$pop : 指定删除Array中的第一个 或 最后一个 元素

删除第一个({$pop:{"test_list" : -1}}  -1 代表最前面, 1 代表最后边 (这和我们Python正好相反))

$字符的指定用法

例子:hobbys中等于5的元素改为 "五"
先查询到hobbys中5的 位置(2) ,将位置存储在 $==(2) 字符中 然后根据$字符的位置(2)更改数据

db.stu.update({"hoobys":5},{ $set: {"hoobys.$":"五"} })

Object操作:

把price 中 19000 改为 19300

db.Oldboy.update({"name":"路飞学城-骑士计划"},{$set:{"price.2":19300}})

我们用了引用下标的方法更改了数值 , "price.2"代指的是 Array 中第3个元素

把other中 count 改为 199

如果 count 小于 200 那么 加 10

排序+选取+跳过

排序  sort  将结果按照关键字排序
db.tablename.find().sort({age:1})  #1正序  -1倒叙

选取  limit
db.tablename.find().limit(2)  #选取两条数据(整个Collection的第一条 Document 开始选取两条)

跳过  skip
db.tablename.find().skip(2)  #跳过前两条数据

选择中间两条或跳过前N条
db.tablename.find().skip(0).limit(2).sort({age:-1})
执行顺序为先排序--跳过--选取

var page=1
var num=2
var sk=(page-1)*num
db.tablename.find().skip(sk).limit(num).sort({age:-1})

使用Python操作mongodb

使用python进行连接

安装mongodb的相关模块
pip3 install pymongo
引入mongodb,连接数据库进行操作
from pymongo import MongoClient
m_client=MongoClient("127.0.0.1",27017)#输入本机与端口的连接
mdb=m_client[‘s20‘]#关系连接数据库

python对数据库的增删改查操作

增:
res=mdb.user.insert_one({"name":"DragonFire"})
res=mdb.user.insert_many([{"name":"小黑"},{"name":"小二B"}])
#增加数据时 res.inserted_id or inserted_ids,都是 ObjectId不是字符串

查:
res = list(mdb.user.find({}))
print(res)
res_list = []
for user in res:
    user["_id"] = str(user.get("_id"))
    res_list.append(user)
res_json = json.dumps(res_list)
print(res_json)

res = list(mdb.user.find({}))
print(res)
for index,user in enumerate(res):
    res[index]["_id"] = str(user.get("_id"))
res_json = json.dumps(res)
print(res_json)

改:
mdb.tablename.update_one({"name":"小蓝"},{"$set":{"name":"A_C"}})

user = mdb.user.find_one({"name":"A_C"})
user["gender"] = 1
user["age"] = 99
user["name"] = "小二A_C"
user["hobby"] = ["choyan","hj","xzt"]
mdb.user.update_one({"name":"A_C"},{"$set":user})

user = mdb.user.find_one({"name":"小二A_C"})
user["hobby"].append("洗头")
user["hobby"].remove("hj")
mdb.user.update_one({"name":"小二A_C"},{"$set":{"hobby":user.get("hobby")}})

删:
res = mdb.user.delete_one({})
print(res.deleted_count)

使用python进行排序+skip+limit

mdb.stu.find().sort("age",pymongo.DESCENDING)#倒叙
mdb.stu.find().sort("age",pymongo.ASCENDING)#正序
mdb.stu.find().skip(2)#跳过前两行数据读取
mdb.stu.find().limit(2)#读取两行数据
res = list(mdb.stu.find().sort("age",pymongo.DESCENDING))
for s in res:
    print(s)

分页:
res=(list(mdb.stu.find().sort("age",pymongo.ASCENDING).limit(2).skip(4))
print(res)

原文地址:https://www.cnblogs.com/sikuaiqian/p/11222895.html

时间: 2024-10-08 20:36:55

MongoDB文件型数据库的相关文章

MongoDB,无模式文档型数据库简介

MongoDB的名字源自一个形容词humongous(巨大无比的),在向上扩展和快速处理大数据量方面,它会损失一些精度,在旧金山举行的MondoDB大会上,Merriman说:“你不适宜用它来处理复杂的金融事务,如证券交易,数据的一致性可能无法得到保证”.若想了解更多关于MongoDB的信息,请看51CTO数据库频道推荐<MongoDB,无模式文档型数据库简介>. NoSQL数据库都被贴上不同用途的标签,如MongoDB和CouchDB都是面向文档的数据库,但这并不意味着它们可以象JSON(J

关系型数据库与Key-value型数据库Mongodb模式设计对比

MongoDb 相比于传统的 SQL 关系型数据库,最大的不同在于它们的模式设计( Schema Design )上的差别,正是由于这一层次的差别衍生出其它各方面的不同. 我们可以简单的认为关系型数据库由数据库.表(table).记录(record)三个层次概念组成,而在构建一个关系型数据库的时候,工作重点和难点都在数据库表的划分与组织上.一般而言,为了平衡提高存取效率与减少数据冗余之间的矛盾,设计的数据库表都会尽量满足所谓的第三范式.相对的,可以认为MongoDb由数据库.集合(collect

SQLLite 可以通过SQL语言来访问的文件型SQL数据库

Web Storage分为两类: - sessionStorage:数据保存在session 对象中(临时) - localStorage:数据保存在本地硬件设备中(永久) sessionStorage: 保存数据的两种方法: sessionStorage.setItem('key','val'); sessionStorage.key = 'val'; 读取数据的两种方法: sessionStorage.getItem('key'); var temp = sessionStorage.key

使用MongoDB作为后台数据库的尝试

MongoDB作为一个阶层型数据库,在很短的时间里面是不可能被大面积推广使用的, 本文作为一个实验性的课题,探讨一下MongoDB作为网站数据库的可能性. 1.MongoDB作为代替关系型数据库的可能性. 2.MongoDB作为代替文件服务器的可能性. 通过探讨来加强对于MongoDB的认识 环境准备 技术选型 1.由于是验证性质的课题,这里没有使用MVC5/6.如果有人对MVC6有兴趣,可以另开一个课题讨论.这里使用的是传统的WebForm. 2.使用MongoDB最新版本作为数据库 3.Mo

MongoDB非关系型数据库开发手册

一:NoSql数据库 什么是NoSQL? NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称. NoSQL用于超大规模数据的存储.(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据).这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展. 为什么使用NoSQL ? 今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据.用户的个人信息,社交网络,地理

一种日志型数据库的实现

在<LSM存储组织结构介绍>一文中,我们了解了LSM存储结构,同时提到针对不同的业务场景,可能需要选择不同的数据库实现.假如需要存储语音.视频或图片,你会选择怎样的实现方式?不需要对类数据进行修改,也不需要排序与范围查找,下面我们来看一种日志型数据库实现方式,因其用于存储语音.图片,我们称其为media数据库. 存储格式 media数据库以数字命名数据文件,每个数据文件大小上限为FileSize左右,fileinfo文件存储当前正在被写入的文件的文件名,数据存储格式如下: 1. 每个数据文件,

MongoDB:更改数据库位置(Windows)

MongoDB在Windows中默认的数据库目录是c:\data.如果在没有该目录的情况下,直接运行mongod.exe,就会报如下错误: 在某些情况下,我们并不想把mongoDB的数据库放在c盘,这时候有两种方法可以切换数据库目录. 1. 命令方式 首先创建数据库目录,例如d:\data.然后运行命令 mongod –dbpath d:\data 2. 配置文件方式 在任意位置创建一个配置文件,例如c:\mongodb\conf的目录下创建一个名为master.cfg的文件,内容为dbpath

MongoDB学习笔记——数据库安装及配置

MongoDB数据库安装 MongoDB官方下载地址:https://www.mongodb.com/download-center 首先需要根据Windows版本选择正确的MongoDB版本进行安装,可以在命令行中输入以下指令检查Windows版本: wmic os get osarchitecture 32 位版本的 MongoDB 只支持 2G 以下的数据库,只适用于测试及评估. 点击下载下来的安装文件进行MongoDB数据库安装,如:mongodb-win32-x86_64-2008pl

MongoDB和关系型数据库简单对比

MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoDB 工作在收集和文件的概念. 数据库:数据库是一个物理容器集合.每个数据库都有自己的一套文件系统上的文件.一个单一的MongoDB服务器通常有多个数据库. 集合:集合是一组MongoDB的文档.它相当于一个RDBMS表.收集存在于一个单一的数据库.集合不执行模式.集合内的文档可以有不同的领域.通常情况下,一个集合中的所有文件是相同或相关的目的. 文档:文档是一组键 - 值对. 文件动态模式.动态模