MongoDB的基本操作、Python的连接使用

一、数据库操作

1. 新建数据库

语法
MongoDB 创建数据库的语法格式如下:

use DATABASE_NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库。
实例
以下我们创建了数据库 mongo:

use mongo

db 显示当前数据库
创建mongo

2. 查看所有数据库

查看所有数据库,可以使用 show dbs 命令:

show dbs

查看所以数据库

注:因为我们新建的test数据库还没写入内容所以并没有显示出来,插入数据 后再此查询就会出现

3. 删除数据库

语法格式如下:

db.dropDatabase()

集合操作

1. 创建集合

插入数据

语法

 db.COLLECTION_NAME.insert(document)  

在当前集合插入一条或多条数据(或叫文档)

参数说明

  • db:表示当前数据库对象。
  • createCollection():创建集合方法。
  • DOCUMENT表示文档。
  • COLLECTION NAME表示集合名称。
  • OPTIONS表示集合配置。
  • insert():向集合中插入文档的方法。

实例

db.c1.insert({ _id: 1, name: "小明", "专业": "计算机", "学号": "00124" }) 

在这里插入图片描述
可以看到我们在当前mongo数据库下显示创建了c1集合并插入了一条数据:
{ _id: 1, name: “小明”, “专业”: “计算机”, “学号”: “00124”}

2. 查看集合

查询数据

查看已插入文档:

db.c1.find()

查询
可以看到我们已经成功在c1插入数据了

我们也可以将数据定义为一个变量进行插入,如下所示:

在这里插入图片描述
首先我们数据定义给了doc变量,然后把doc插入到了c1

语法
remove() 方法的基本语法格式如下所示:

db.collection.remove( <query>, <justOne> )  

参数说明:

  • query :(可选)删除的集合的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个集合。

实例

我们移除 name为 ‘小明’ 的文档:

db.c1.remove({"name":"小明"})

在这里插入图片描述
通过find()查询可以看到已经删除掉了

如果你有同{“name”:“小明”}的多条数据,但你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:

db.c1.remove({"name":"小明"},1)

如果想删除所有的数据可以这样:

db.c1.remove({})

3. 删除集合

db.集合名.drop()
修改数据

语法

db.collection.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 :可选,抛出异常的级别。

实例
准备数据
在这里插入图片描述

通过 update() 方法来更新"姓名":

db.c1.update({"姓名":"李欣"},{$set:{"姓名":"张三"}})

update()方法默认是替换整条数据,故此处用修改器 $set 进行修改(添加)列值
(如果字段不存在会添加一个新的键值对)
在这里插入图片描述
以上语句只会修改第一条发现{“姓名”:“李欣”}的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

db.c1.update({"姓名":"李欣"},{$set:{"姓名":"张三"}},{multi:true})

升级语法

修改器作用
$inc递增
$rename重命名列
$set修改列值
$unset删除列

实例
准备数据:

db.c2.insert([{"姓名":"张三","语文":80,"数学":66,"英语":55},{"姓名":"李四","语文":53,"数学":82,"英语":76,"化学":92}])

在这里插入图片描述

递增
给c2的数据集中 {“姓名”:“李四”} 的语文分数增加20分:

db.c2.update({"姓名":"李四"},{$inc:{"语文":20}}) //可填负数

在这里插入图片描述

重命名列(字段)
我们把c2里的 姓名 字段改为英文的 name

db.c2.update({"姓名":"李四"}, {$rename:{"姓名":"name"}})

在这里插入图片描述

删除列

把{name:“李四”}里的化学删掉了

db.c2.update({name:"李四"},{$unset:{"化学":true}})

在这里插入图片描述

二、条件查询

运算符作用
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$ne不等于
$inin
$ninnot in

实例
在c2中查询数学小于70分的数据

db.c2.find({"数学":{$lt:70}})

在这里插入图片描述

配合pretty()可进行易读查询

db.c2.find({"数学":{$lt:70}}).pretty() //数据少不明显

三、聚合操作

表达式描述
$sum计算总和
$avg计算平均值
$min最小值
$max最大值
$push在结果文档中插入值到一个数组中
$addToSet在结果文档中插入值到一个数组中,但不创建副本
$first根据资源文档的排序获取第一个文档数据
$last根据资源文档的排序获取最后一个文档数据

语法

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)  
$group

实例

准备数据c3

db.c3.insert([
{ id:"1",name:"iphone8",price:3000,type:"电子通讯"},{ id:"2",name:"lining",price:500,type:"运动鞋"},
{ id:"3",name:"安踏",price:300,type:"运动鞋"},
{ id:"4",name:"HUAWEI MATE30",price:5000,type:"电子通讯"},{ id:"5",name:"vivo x27",price:4000,type:"电子通讯"}])
  1. 计算c3中电子通讯和运动鞋的 price 总和
db.c3.aggregate([{$group:{_id:"$type","总价":{$sum:"$price"}}}]) 

在这里插入图片描述
首先对 _id:“$type” 进行 g r o u p 分组,对 " group 分组,对 " group分组,对"price" 进行 $sum 求和方式,求和结果存放在 总价 列

四、Python连接数据库

官网下载Anaconda:https://www.anaconda.com/download/success

在这里插入图片描述

在Anaconda Shell里安装 pymongo:

pip install pymongo

在这里插入图片描述
确保已经安装pymongo的情况下,在开始菜单里,打开安装Anaconda附带的Jupyter Notebook
在这里插入图片描述

连接

在Jupyter里新建Python文件,运行以下每条代码

  1. 引入pymongo
# 引入pymongo
from pymongo import MongoClient
  1. 连接MongoDB
# 连接到MongoDB,使用本地端口 localhost
client = MongoClient('localhost')
  • 连接数据库
    如果该数据库不存在,会自动创建一个mongo数据库
# 连接到 ‘mongo’ 数据库
db = client['mongo']
  • 连接数据库里的集合
    如果该集合不存在,会自动创建一个 c3 集合
# 连接到 c3 集合
collection = db['c3']
  • 查询集合里面的内容
# 查询 集合 所有内容
for doc in collection.find():
    print(doc)

在这里插入图片描述

验证

  • 我们尝试在Jupyter里新建一个数据库并往里面一条数据存放到c4集合里:
    在这里插入图片描述
    最后验证连接成功
参考资料:
  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL。在使用MongoDB做产品原型的过程中,我们总结了MonogDB的一些亮点:使用JSON风格语法,易于掌握和理解:MongoDB使用JSON的变种BSON作为内部存储的格式和语法。针对MongoDB的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现。相对于SQL来说,更加直观,容易理解和掌握。Schema-less,支持嵌入子文档:MongoDB是一个Schema-free的文档数据库。一个数据库可以有多个Collection,每个Collection是Documents的集合。Collection和Document和传统数据库的Table和Row并不对等。无需事先定义Collection,随时可以创建。Collection中可以包含具有不同schema的文档记录。 这意味着,你上一条记录中的文档有3个属性,而下一条记录的文档可以有10个属性,属性的类型既可以是基本的数据类型(如数字、字符串、日期等),也可以是数组或者散列,甚至还可以是一个子文档(embed document)。这样,可以实现逆规范化(denormalizing)的数据模型,提高查询的速度。图1 MongoDB是一个Schema-free的文档数据库图2是一个例子,作品和评论可以设计为一个collection,评论作为子文档内嵌在art的comments属性中,评论的回复则作为comment子文档的子文档内嵌于replies属性。按照这种设计模式,只需要按照作品id检索一次,即可获得所有相关的信息了。在MongoDB中,不强调一定对数据进行Normalize ,很多场合都建议De-normalize,开发人员可以扔掉传统关系数据库各种范式的限制,不需要把所有的实体都映射为一个Collection,只需定义最顶级的class。MongoDB的文档模型可以让我们很轻松就能将自己的Object映射到collection中实现存储。图2 MongoDB支持嵌入子文档简单易用的查询方式:MongoDB中的查询让人很舒适,没有SQL难记的语法,直接使用JSON,相当的直观。对不同的开发语言,你可以使用它最基本的数组或散列格式进行查询。配合附加的operator,MongoDB支持范围查询,正则表达式查询,对子文档内属性的查询,可以取代原来大多数任务的SQL查询。CRUD更加简单,支持in-place update:只要定义一个数组,然后传递给MongoDB的insert/update方法就可自动插入或更新;对于更新模式,MongoDB支持一个upsert选项,即:“如果记录存在那么更新,否则插入”。MongoDB的update方法还支持Modifier,通过Modifier可实现在服务端即时更新,省去客户端和服务端的通讯。这些modifer可以让MongoDB具有和Redis、Memcached等KV类似的功能:较之MySQL,MonoDB更加简单快速。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值