从本身的另外一处博客移动过来。长期维护,不按期添加新内容。linux
mongoDB按照分类应当是非关系型数据库,这种数据库没有传统sql那样的表的概念,天然也不支持多表查询。sql
官方的linux安装文档在这里mongodb
安装方法无外乎是两种:docker
一种是下载源文件,而后手动安装;另外一种是经过包管理器进行安装。数据库
介绍经过包管理在ubuntu上安装:ubuntu
向包管理系统导入公钥windows
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 pull mongo:latest
建立、运行一个容器:
docker run -p 27017:27017 -d mongo:latest #其余参数自定
首先是docker自身的不稳定性,会致使数据丢失。典型的就是有时候容器坏了拉不起来,而后要从新配置。全部的数据天然而然是没有了。
其次是效率。相对于直接使用,性能有所损耗,在大量写入的时候耗时多。
不推荐盲目地在生产中使用docker下的mongoDB。作测试是能够的。
在官方网站上下载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
以前一直使用一个叫robo3t的GUI管理软件,功能中规中矩。虽然版本不是很新,测试是能够兼容最新的mongoDB的。
推荐使用官方自带的MongoDB Compass
。简洁,强大。在安装mongoDB以后会提示安装。
若是没有的话,可到在MongoDB的官网上下载,下载须要填写一点信息,能够瞎填,提交就会开始下载。国家最好选在中国或者附近,上次选了大洋彼岸的国家,下载地址根本访问不到。
操做 关系型 MongoDB database database 数据库/数据库 table collection 数据表/集合 row document 数据记录行/文档 column field 数据字段/域 index index 索引/索引 table joins 表链接/MongoDB不支持 primary key primary key 主键/MongoDB自动将_id字段设置为主键
附带了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
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"}) #指定删除