MongoDB

MongoDB

"""
定义:基于分布式文件存储的Nosql数据库

优势:
	1、无数据结构限制
	2、冗余和扩展(复制集保障数据安全 + 分片扩展数据集合)
	3、良好支持 (完善的文档 + 齐全的驱动支持
"""

# **运行MongoDB- 服务端** (默认端口  27017)
mongod --dbpath "D:\MongoDB\data"   # D:\MongoDB\data  安装目录
# 开启客户端
mongod

# **MongoDB- 概念介绍**
database # 数据库
collection  # 数据库表/集合 (类似于 sql 中的table)
document	# 数据记录行/文档 (类似于 sql 中 row)
field  # 字段/域 (类似于sql中 column)
index # 索引
primary key  # 主键


# **MongoDB - 元素**
# 数据库、集合、文档(关系型数据库中的一行)

# **基本使用**
show dbs  # 查看数据库
use "数据库名称"  # 切换数据库/若没有则创建数据库
db     # 查看当前数据库
db.dropDatabse()	# 数据数据库
show tables / show collections  # 查看集合
db.shutdownServer()		# 退出数据库

# **创建集合**
db.createCollection(name,options)  # name:集合名称, options:可选参数,指定有关内存大小及索引的选项
db.createCollection('sub',{capped:true,size:10})  # capped 是否设置上限,size 存数据上限、
show collections  # 显示当前数据中的所有集合
# 删除数据库
db."数据库名称".drop()  

# **数据类型**
String  # 字符串 UTF-8
Boolean  #布尔类型
Integer   # 整数,位数取决于服务器
Double  # 存储浮点数
Arrays	# 数组 或 列表
Object	# 嵌入式文档
Null	# 存储null值
Timestamp	# 时间戳
Object ID # 12个字节的 十六进制数
	# 前4个字节当前时间戳
	# 3个字节 机器ID
	# 2个字节 MongoDB 服务进程 id
	# 最后 3个字节,简单增量值

增删改查

# 一个表称为一个集合

# 数据插入  数据格式为json,id不能重复、支持多 条插入数据库
db."集合名".insert( {} )  
db.lcl_table.insert({name:lcl})    # 插入数据  name :lcl  / _id  制定主键
db.lcl-table.find()    # 查看表中所有
# 多条插入
for(i=3;i<10;i++)db.lcl_table.insert({name : i})

# 数据更新 / 如果没有的情况下直接插入
db.lcl_table.save({_id:1,name:wzh})   # 将id 为1 的数据更新为 wzh

# 查询数据
db.lcl-table.find()  # 查看集合中的 所有数据
db.lcl-table.find().pretty   # pretty 对查询的内容进行格式化
db.lcl-table.findOne()   # 查询一条
db.lcl-table.find().count()  # 总条数
db.lcl-table.find("查询条件").limit(2)  # 查询前2条数据
db.lcl-table.find().skip(2)  # 跳过前2条
db.lcl-table.find(book:{{$all:{"mogo","php"}}})  # book字段对应的列表种同时含有mogo,和php
db.lcl-table.find({"books.1":"java"})   # book 中第二本为java
db.lcl-table.find({books:{$size:4}})  # books 里面有 4 本书
db.lcl-table.distinct("county")   # 返回不重复的国家

db.lcl-table.find().skip(2).limit(2)  # 可以做分页功能

# 数据的查询映射
# 查询所有,按要求返回字段
db.lcl-table.find({}{_id:1}).   # 只显示id字段  (1 为显示该字段 )(0 为返回其他字段)
db.lcl-table.find().sort(name : 1)  # 按name字段升序排列
db.lcl-table.find().sort(name :-1)  # 按 name字段降序排列

# 运算符
$lt    # 小于
$lte	# 小于等于
$gt		# 大于
$gte	# 大于等于
db.lcl-table.find(y :($gte:18))  # 找 y 大于等于 18的值

# 范围运算符
db.lcl-table.find(y :{$in[3,7]})  #  等于 3 或 7
db.lcl-table.find(y :{$nin:[3,7]})  #  不等于 3 或 7,取反
db.lcl-table.find({$or:[{age:18},{x:4}]})   # or的条件


# 修改数据
db.lcl-table.update({x:100},{y:99})  # 将 x =100 的 所有数据 替换成 y = 99  整条数据更新
db.lcl-table.update({x:100},{$set:{y:99}})  # 将 x =100 数据中 y的部分更新为y = 99  
db.lcl-table.update({x:100},{$set:{y:99}}{multi:true})  # 更新多条
db.lcl-table.remove({x:100})   # 按条件删除 {x :100}

聚合

$group  # 分组统计
$match  # 过滤数据,输出符合条件的文档
$project  #

# 根据 gender分组,各组中年龄的总和
db,stu.aggregate(
	{$group:{_id:'$gender',count:{$sum:"$age"}}}
)
# 查询年龄大于20的学生
db,stu.aggregate(
	{$match:{age:{$gt:20}}}
)
# 查询年龄大于20的男生和女生人数(先过滤再分组)
db,stu.aggregate(
	{$match:{age:{$gt:20}}}
	{$group:{_id:'$gender',count:{$sum:1}}}
)

MongoDB与python交互

# 交互模块安装
pip install pymongo

# 连接
from pymongo import MongoClient
class MongoDB(object):
	def __init__(self):
		# 连接 test集合
		self.client = MongoClient(host="localhost",port = 27017)
		# self.client = MongoClient("mongodb://127.0.0.1:27017/")
		self.db = self.client['test']['demo']
		
	 
	 # 添加单条数据
	 def add_one(self,data):
	 	self.db.demo.insert_one()

	 # 添加多条
	 def add_many(self,data):
	 	self.db.demo.insert_many()

	# 获取一条数据
	 def get_one(self):
	 	return self.db.demo.find_one()

	# 获取多条
	 def get_many(self,query):
	 	return self.db.demo.find(query)

if __name__=='__main__'
	mdb = MongoDB()
	
	data={"title":"python","content":"lcl"}
	mdb.add_one(data)
	
	data=[	{"title":"python","content":"lcl"}
			{"title":"php","content":"lcl"}]
	mdb.add_many(data)
	
	query = {"title":"python","content":"lcl"}
	results = get_many(query)
	for data in result:
		print(data)
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值