MongoDB文件型数据库
Posted sikuaiqian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于MongoDB文件型数据库的主要内容,如果未能解决你的问题,请参考以下文章