MongoDB数据库操作以及python连接MongoDB

MongoDB作为最像关系型数据的非关系型数据库,有许多类似SQL的功能,他是一个基于分布式文件储存的数据库,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB的主要特点:

  • MongoDB 的提供了一个面向文档存储,操作起来比较简单和容易。
  • 你可以在 MongoDB记录中设置任何属性的索引( 如 : FirstName=“Sameer”, Address=“8 Gandhi Road”)来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得 MongoDB 有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo 支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻 易查询文档中内嵌的对象及数组。
  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些 指定的数据字段 。
  • Mongodb 中的 Map/reduce 主要是用来对数据进行批量处理和聚合操作。
  • Map 和 Reduce。Map 函数调用 emit(key,value)遍历集合中所有的记录, 将 key与value 传给 Reduce 函数进行处理。
  • Map函数和 Reduce函数是使用Javascript 编写的 , 并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB 支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP, C#等多种语言。
  • MongoDB 安装简单。

MongoDB术语/概念与SQL区别:

SQL 术语/概念MongoDB 术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接, MongoDB 不支持
primary keyprimary key主键, MongoDB 自动将_id 字 段设置为主键

MongoDB中数据库基本操作

展示所有数据库列表:
show dbs
在这里插入图片描述
创建数据库:
use database_name,会创建数据库并切换至该数据库
在这里插入图片描述
显示所在数据库:
db
在这里插入图片描述
删除数据库:
先进入想要删除的数据库,然后输入db.dropDatabase()
在这里插入图片描述

MongoDB集合(数据库表)

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关 联性。
创建集合:
1、创建数据库后,直接在数据中添加数据可自动创建相应集合
在这里插入图片描述
2、db.createCollection(name,options),name表示要创建的集合名,options是可选参数,指定有关内存大小及索引的选项。
在这里插入图片描述
options可选参数如下:

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

查看已有集合:

show collections/show tables

在这里插入图片描述
删除集合:

db.collection.drop()

在这里插入图片描述

MongoDB文档(数据记录行)

MongoDB文档时一组键值(key-value)对(BSON),例如{“name”:“xiaowang”,“age”:18}
文档不需要设置相同的字段,相同的字段不需要相同的数据类型,这是其区别于关系型数据库很重要的一点,也是MongoDB的特点。
MongoDB需要注意的点:

  • 文档中的键/值对是有序的。
  • 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据 类型(甚至可以是整个嵌入的文档)。
  • MongoDB 区分类型和大小写。
  • 文档的键是字符串。除了少数例外情况,键可以使用任意 UTF-8 字符。 文档键命名规范: 1、 键不能含有\0 (空字符)。这个字符用来表示键的结尾。 2、.和$有特别的意义,只有在特定环境下才能使用。 3、 以下划线"_"开头的键是保留的(不是严格要求的)。

和其他数据库一样,我们大部分时间都是在操作MongoDB文档,MongoDB的增删改查:

MongoDB使用insert()或save()方法向集合中插入文档,语法如下

db.collection_name.insert(document)

例:

db.classes.insert({"class":"python","name":"小王"})

db.collection_name.save(document),save()方法如果不加_id字段和insert()方法一样,但是如果添加了_id字段,且没有该_id字段,会插入一条新数据,如果集合中已经存在该字段,会更新该字段的数据。
例:

db.classes.save({"_id":100,"class":python,"name":"小黄"})


db.collection_name.remove(query,justOne,writeConcern),其中query为删除条件。
justOne可选,如果设置为ture或者1,会删除第一条符合条件的文档,默认为false,全部删除。
writeConcern可选,代表抛出异常的级别。
例:

db.test.remove({age:19},true)

在这里插入图片描述

我们已经知道当save()方法中有已存在的_id,会修改该文档数据,MongoDB中还有一个修改的方法update()

db.collection_name.update(query,update,upsert,multi,writeConcern)

参数说明:
query:修改条件
update:需要进行更新的操作
upsert:可选参数,设置成true,如果修改条件不存在会添加,默认为false,不添加
multi:可选参数,默认为false,只更新找到的第一条数据,设置成true会修改所有符合条件的数据
writeConcern:可选参数,抛出异常的级别
更新操作符:

  • $currentDate 将字段的值设置为当前日期,可以是Date或Timestamp。
  • $inc 按指定的数量增加字段的值。
  • $min 仅当指定的值小于现有字段值时才更新字段。
  • $max 仅当指定的值大于现有字段值时才更新字段。
  • $mul 将字段的值乘以指定的量。
  • $rename 重命名字段。
  • $set 设置文档中字段的值。
  • $setOnInsert 如果更新导致文档插入,则设置字段的值。对修改现有文档的更新操作没有影响。
  • $unset 从文档中删除指定的字段。


db.collection_name.find(query,projection),query为可选操作,代表查询条件,不写代表查询所有。projection可选参数,使用投影操作符指定返回的键。查询时返回文档中 所有键值, 只需省略该参数即可(默认省略)。
如果想要显示易读模式,可使用db.collection_name.find(query,projection).pretty()
除了find()以外,还有findOne()方法,只返回一个文档。
MongoDB的查询和sql语句类似,只不它的查询语句以键值对的形式存在,MongoDB与sql中where语句的对比

操作格式范例SQL语句
等于{<key>:<value> }db.col.find({“name”:“小王”}).pretty()where name = ‘小王’
小于{<key>:{$lt:<value>}}db.col.find({“age”:{$lt:18}}). pretty()where age < 18
小于或 等于{<key>:{$lte:<value>}}db.col.find({“age”:{$lte:18}} ).pretty()where age <= 18
大于{<key>:{$gt:}}db.col.find({“age”:{$gt:18}}) .pretty()where age > 18
大于或 等于{<key>:{$gte:<value>}}db.col.find({“age”:{$gte:18} }).pretty()where age >= 18
不等于{<key>:{$ne:<value>}}db.col.find({“age”:{$ne:18}} ).pretty()where age != 18

MongoDB中OR和AND的用法
AND:find()可传入多个键,每个键以逗号隔开,表示and,db.col.find({key1:value1,key2:value2}).pretty(),类似sql中的WHERE age = 18 AND name = “小王”。
OR:MongoDB中的or条件语句使用了关键字$or,语法格式如下:
db.col.find({$or:[{key1:value1},{key2:value2}]}).pretty(),类似sql中的WHERE age = 18 OR name = “小王”。
AND 和 OR联合使用:例如我们要查询所有班级中属于python班的和年龄为18岁的或者属于python班的和年龄为19岁的,mysql中可以这样写:SELECT * FROM classes WHERE class = "python" AND (age = 18 OR age = 19),在MongoDB中可以这样写:

db.classes.find({class:"python"},$or:[{age:18},{age:19}]).pretty()

$type操作符:

类型数字备注
Double1
String2
Object3
Array4
Binary data5
Undefined6已废弃。
Object id7
Boolean8
Date9
Null10
Regular Expression11
JavaScript13
Symbol14
JavaScript (with scope)15
32-bit integer16
Timestamp17
64-bit integer18
Min key255Query with -1.
Max key127

来源:https://www.runoob.com/mongodb/mongodb-operators-type.html
例如,我们要查询classes中所有name为String类型的数据:db.classes.find({name:{$type:2}})

MongoDB limit()
limit()方法可用于获取指定数量的数据记录,接受一个数字参数,表示查看的数据条数,语法如下:

db.COLLECTION_NAME.find().limit(NUMBER)

MongoDB skip()
limit()可以指定查看数据的数量,skip则是跳过指定数量的数据,同样接收一个数字,语法如下:

db.COLLECTION_NAME.find().skip(NUMBER)

例如db.col.find().skip(2)表示col中所有数据中搁2个取一个。
MongoDB sort()
sort() 方法用于对数据进行排序,可通过参数进行指定排序的字段,使用-1或1指定排序的方式,1为升序,-1为降序,语法如下:

db.COLLECTION_NAME.find().sort({key:1})

例如db.col.find().sort({"age":-1})表示取出col的所有数据并以age字段进行逆序排序
MongoDB count()
count()方法用于数据的统计,语法如下:

db.col.count() 或 db.col.find().count()

MongoDB aggregate()
MongoDB中聚合(aggregate)主要用于处理数据,例如统计平均值,求和等,并返回计算后的数据结果,语法如下:

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

一些常用聚合表达式

表达式描述实例
$sum计算总和。db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$sum : “$likes”}}}])
$avg计算平均值db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$avg : “$likes”}}}])
$min获取集合中所有文档对应值得最小值。db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$min : “$likes”}}}])
$max获取集合中所有文档对应值得最大值。db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$max : “$likes”}}}])

python 操作 MongoDB

python中操作MongoDB需要安装第三方模块pymongo:pip install pymongo

# 连接本机mongo
client = pymongo.MongoClient("127.0.0.1",27017)
# 选择test库
db = client.test
# 查询所有数据
db.test.find().pretty()
# 插入数据
db.test.insert({"name":"小王","age":18})
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值