MongoDB和pymongo自用手册
- [*] 本文出处:http://b1u3buf4.xyz/
- [*] 本文作者:B1u3Buf4
- [*] 本文授权:禁止转载
从自己的另一处博客移动过来。长期维护,不定期添加新内容。
前述和安装
mongoDB按照分类应当是非关系型数据库,这种数据库没有传统sql那样的表的概念,自然也不支持多表查询。
linux 安装
官方的linux安装文档在这里
安装方法无外乎是两种:
一种是下载源文件,然后手动安装;另一种是通过包管理器进行安装。
介绍通过包管理在ubuntu上安装:
向包管理系统导入公钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
创建文件列表(这里是16.04,不同版本此处有差别)
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
更新包数据
sudo apt-get update
安装最新的稳定版
sudo apt-get install -y mongodb-org
通过启动服务命令,然后就可以运行mongodb了。
docker容器部署
拉取镜像:
docker pull mongo:latest
创建、运行一个容器:
docker run -p 27017:27017 -d mongo:latest #其他参数自定
坑人的地方
首先是docker自身的不稳定性,会导致数据丢失。典型的就是有时候容器坏了拉不起来,然后要重新配置。所有的数据自然而然是没有了。
其次是效率。相对于直接使用,性能有所损耗,在大量写入的时候耗时多。
不推荐盲目地在生产中使用docker下的mongoDB。做测试是可以的。
Windows安装
在官方网站上下载mongoDB,最新的版本只支持64位。
打开安装包,选择“Custom”自定义安装,安装路径可以修改到非系统盘。然后不断“下一步”,安装至结束。
创建数据库文件的存放位置
因为启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功。数据存放的位置也是比较随意的。命令行中使用如下命令启动mongodb服务:mongod --dbpath 数据存放位置的绝对地址,命令行中会看到一些初始化的内容。如果不成功,可以查看一下端口是否被占用。
命令行下运行MongoDB服务器或者配置MongoDB服务,两者任选一个方式启动就可以了。
新建一个mongo.config并输入(dbpath是数据存储的地址,logpath是记录日志的地址。):
dbpath=D:\data
logpath=D:\MongoDB\mongo.log
在管理员CMD下输入:mongod --config mongo.config --install --serviceName "MongoDB"。即根据刚创建的mongo.config配置文件安装服务,名称为MongoDB。
之后就可以通过命令或者在“服务”中控制MongoDB了。
启动MongoDB服务
net start MongoDB
关闭MongoDB服务
net stop MongoDB
GUI管理器
之前一直使用一个叫robo3t的GUI管理软件,功能中规中矩。虽然版本不是很新,测试是可以兼容最新的mongoDB的。
推荐使用官方自带的MongoDB Compass。简洁,强大。在安装mongoDB之后会提示安装。
如果没有的话,可到在MongoDB的官网上下载,下载需要填写一点信息,可以瞎填,提交就会开始下载。国家最好选在中国或者附近,上次选了大洋彼岸的国家,下载地址根本访问不到。
MongoDB和关系型数据库不同之处
操作 关系型 MongoDB
database database 数据库/数据库
table collection 数据表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引/索引
table joins 表连接/MongoDB不支持
primary key primary key 主键/MongoDB自动将_id字段设置为主键
mongoDB语法
附带了SQL语句,以便理解。
查询所有表中信息
db.users.find()
select * from users
条件查询
db.users.find({"username" : "joe", "age" : 27})
select * from users where "username" = "joe" and age = 27
依据条件查询所有信息
db.users.find({}, {"username" : 1, "email" : 1})
select username, email from users
#明确注意禁止_id值的返回
db.users.find({}, {"username" : 1, "_id" : 0})
数值范围条件查询
#$lt(小于) $lte(小于等于) $gt(大于) $gte(大于等于)
db.users.find({"age" : {"$gte" : 18, "$lte" : 40}})
select * from users where age >=18 and age <= 40
不等条件查询
db.users.find({"username" : {"$ne" : "joe"}})
select * from users where username <> "joe"
表范围查询
db.users.find({"ticket_no" : {"$in" : [725, 542, 390]}})
select * from users where ticket_no in (725, 542, 390)
db.users.find({"ticket_no" : {"$nin" : [725, 542, 390]}})
select * from users where ticket_no not in (725, 542, 390)
同集合多条件查询
db.users.find({"$or" : [{"ticket_no" : 725}, {"winner" : true}]})
select * form users where ticket_no = 725 or winner = true
pymongo模块用法
安装pymongo
pip install pymongo
导入模块
import pymongo
仅做客户端操作的时
from pymongo import MongoClient
建立连接
conn = MongoClient('192.168.0.111', 27017)
或者
conn = MongoClient('192.168.0.111:27017')
连接至数据库
db = conn.mydb
或者
db = conn['mydb']
mydb为所要连接的数据库,如果不存在,则创建数据库。
连接选择数据集合
myset = db.test
或者
myset = conn.mydb.test
test为所要使用的集合,没有则自动创建。
查看全部集合
db.collection_names()
查看指定集合中某条记录
db.Account.find_one({"key":"value"})
查看指定集合的字段
db.Account.find_one({},{"k1":v1,"k2":"v2"})
查看指定集合中多条记录
for item in db.Account.find():
item
for item in db.Account.find({"Name":"li"}):
item["Name"]
查看指定集合记录统计
db.Account.find().count()
db.Account.find({"key":"value"}).count()
集合查询结果排序
db.Account.find().sort("Name") #默认为升序
db.Account.find().sort("Name",pymongo.ASCENDING) #升序
db.Account.find().sort("Name",pymongo.DESCENDING) #降序
集合查询结果多列排序
db.Account.find().sort([("Name",pymongo.ASCENDING),("add",pymongo.DESCENDING)])
还有一个find_one()的方法,返回符合条件的一条记录,而find()则是返回返回所有可能的内容。
通常在需要随机抽出一条内容的情况下使用find_one()更实用。
更高级的扩展
下面方法在执行完相应第一个的操作之后,会附加进行另一个操作。
查找之后进行删除
find_one_and_delete()
查找之后进行更新
find_one_and_update()
查找之后进行替换
find_one_and_replace()
添加记录
db.Account.insert({"ID":21,"Name":"Ling"})
修改记录
db.Account.update({"User":"li"},{"$set":{"add":"BJ","pw":"123"}})
删除记录
db.Account.remove() #全部删除
db.Test.remove({"key":"value"}) #指定删除
MongoDB和pymongo自用手册的更多相关文章
- MongoDB和pymongo的CURD
一.mongodb 1.介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之 ...
- SQL-如何使用 MongoDB和PyMongo。
先决条件 在开始之前,请确保已经安装了 PyMongo 发行版. 在 Python shell 中,下面的代码应该在不引发异常的情况下运行: >>> import pymongo 假 ...
- Windows平台下为Python添加MongoDB支持PyMongo
到Python官网下载pymongo-2.6.3.win-amd64-py2.7.exe 安装pymongo-2.6.3.win-amd64-py2.7.exe 参照官方的用例进行测试 打开命令提示符 ...
- MongoDB最佳实践中文手册
背景:查阅了一下MongoDB的相关文档,发现中文文档还是比较少的,工作中需要用到MongoDB,而这本<MongoDB最佳实践>是很好的选择,所以就把这本手册翻译了一下,其中生涩的专业用 ...
- pymongo使用手册
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...
- MongoDB、PyMongo数据操作
MongoDB 命令 C:\Program Files\MongoDB\Server\4.0\bin mongo 客户端 mongod 服务端 mongoexport 导出 普通格式,每条记录一行,整 ...
- MongoDB之pymongo
PyMongo是什么 PyMongo是驱动程序,使python程序能够使用Mongodb数据库,使用python编写而成. 安装 环境:Ubuntu 14.04+python2.7+MongoDB 2 ...
- CentOS平台下为Python添加MongoDB支持PyMongo
下载PyMongo [root@leezhen ~]# wget https://pypi.python.org/packages/source/p/pymongo/pymongo-2.6.3.tar ...
- mongodb 安装pymongo 驱动
下载驱动包: https://pypi.org/project/pymongo/ 解压: tar zxvf pymongo-3.8.0.tar.gz 安装: python setup.py i ...
随机推荐
- 【大数据系列】HDFS初识
一.HDFS介绍 HDFS为了做到可靠性(reliability)创建了多分数据块(data blocks)的复制(replicas),并将它们放置在服务集群的计算节点中(compute nodes) ...
- PV&UV&IP之间的区别和联系
PV PV是网站分析的一个术语,用于衡量网站用户访问的网页的数量.对于广告投入商来说,PV值可以预期它可以带来多少收入广告,一般来说,OV与来访者的数量成正比,但是PV并不直接决定页面的真实来访者数量 ...
- vue笔记 - 生命周期第二次学习与理解
对于刚接触vue一两个月.才仅仅独立做过一两个vue项目的小白来说,以前一直自我感觉自己知道vue的生命周期, 直到前两天去面试,面试官让我说一下vue的生命周期... 其实我的心中是有那张图的,但是 ...
- 网狐荣耀平台找不到存储过程 'GSP_GS_LoadGameMatchItem'错误解决
把RYGameMatchDB的存储过程复制到RYGameScoreDB即可,GSP_GS_InsertGameMatchItem和GSP_GS_DeleteGameMatchItem也一样 由于存储过 ...
- loop设备及losetup命令
1. loop设备介绍 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备.它能使我们像块设备一样访问一个文件.在使用之前,一个 loop 设备必 ...
- 网卡bonding模式 - bond0、1、4配置
网卡bonding模式 - bond0.1.4配置 网卡bonding简介 网卡绑定就是把多张物理网卡通过软件虚拟成一个虚拟的网卡,配置完毕后,所有的物理网卡的ip和mac将会变成相同的.多网卡同时工 ...
- VC++组合框——学习笔记1(组合框选项的添加和无法显示下拉选项)
VC++控件 ---组合框 环境VC2003 1.组合框添加下拉菜单选项 现在有尝试了两个命令 (m_com为组合框控control类型的变量.) 方法一 m_com.AddString(&qu ...
- git如何回滚当前修改的内容?
git如何回滚当前修改的内容? 1.打开git gui,在工具栏上点击 commit ,选择 Revert Changes, 这里可以回滚单个文件: 2.一键回滚所有修改: 打开git gui,在工 ...
- iOS - WKWebView的使用和长按手势识别二维码并保存
WKWebView的图片二维码使用: .长按手势识别二维码并保存 .识别二维码跳转;不是链接显示内容点击网址跳转 .解决url包含中文不能编码的问题 .文字带链接网址,点击跳转 .纯文本-文字html ...
- yii---生产链接的方法
yii生成链接的方法: Yii::$app->urlManager->createUrl('xxx/xxx') <?= Yii::$app->urlManager->cr ...