MongoDB的简单实践
时间:2020-03-24
本文章向大家介绍MongoDB的简单实践,主要包括MongoDB的简单实践使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
安装与配置
下载完安装包,解压
tar -xvf mongodb-linux-x86_64-3.0.6.tgz -C /opt
cd /opt/mongodb-linux-x86_64-3.0.6/bin
创建数据库目录
mkdir -p /data/db
启动mongodb
./mongod
启动mongo时可以命令行添加参数
--port arg 端口 默认27017
--bind_ip arg 绑定ip 默认127.0.0.1
--auth 加密运行
--noauth 不加密
--fork 守护进程启动
--dbpath arg 指定数据库目录 默认 /data/db
启动客户端
命令格式为:./mongo [options][db address] [file names (ending in .js)]
./mongo #默认连接本机
常用命令
-
创建数据库
use <数据库名>
use mydb
-
创建集合
db.createCollection(<集合名>)
db.createCollection("col")
-
插入
db.col.insert(<文档>)
db.col.insert({ name:"Tom", age:20 })
-
查询
db.col.find(<查询条件>)
db.col.find({name: "Tom"})
-
修改
db.col.update( <查询条件>, <更新操作> )
db.col.update( {name: "Tom"}, {$set:{age: 25}} )
-
删除
db.col.remove( <查询条件>, <是否只删除一个文档:可选> )
db.col.remove( {name: "Tom"} )
-
聚合
db.col.aggregate( <聚合操作> )
db.col.insert([ {userId:1,date:"2019-11-18 14:54:28"}, {userId:1,date:"2019-11-18 14:54:28"}, {userId:1,date:"2019-11-18 14:54:28"}, {userId:2,date:"2019-11-18 14:54:28"}, {userId:3,date:"2019-11-18 14:54:28"}, {userId:2,date:"2019-11-18 14:54:28"} ]) db.col.aggregate([{$group : {_id : "$userId", count : {$sum : 1}}}])
实例 QQ动态
-
建立数据库和集合
use qqDynamics show dbs db.createCollection("qqDynamics")
-
设计结构
文档结构如下
{ qq:QQ号 name:昵称 text:动态内容 comments:列表,评论与回复 createdDatetime:创建时间 }
其中comments为列表格式,可以嵌套该文档,实现多级的回复与评论.
但是使用嵌套会限制数据的大小不能超过16MB,也就不能用较多的评论,较多时应改用引用的方式 会增加查询次数.
-
设计操作语句
-
创建新动态
db.qqDynamics.insert({ qq: 652281589, name: "伍慧", text: "为什东西成为人员.的话提高具有继续为了相关责任.工程国际首页就是这么那么.", comments: [], createdDatetime: "2019-02-11 03:47:16" });
-
评论
db.qqDynamics.update( {"_id" : ObjectId("5e76f81abd5867c50aa550f5")}, {$push:{'comments': { qq: 611376741, name: "梁琴", text: "位置客户中文因为.", comments: [], createdDatetime: "2019-01-11 19:03:09" } }} )
-
回复评论
db.qqDynamics.update( {"_id" : ObjectId("5e76f81abd5867c50aa550f5")}, {$push:{'comments.0.comments': { qq: 635902894, name: "伍慧", text: "系统品牌的是文章.", comments: [], createdDatetime: "2019-12-05 08:15:00" } }} )
-
回复的回复
db.qqDynamics.update( {"_id" : ObjectId("5e76f81abd5867c50aa550f5")}, {$push:{'comments.0.comments.0.comments': { qq: 611376741, name: "梁琴", text: "AAAAA.", comments: [], createdDatetime: "2019-01-11 19:03:09" } }} )
-
订单历史数据统计分析
使用pymongo
连接mongo数据库,进行分析,使用pyecharts
绘制图标
#导入库,并连接数据库
from pyecharts.charts import *
from pprint import pprint
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["orderData"]
col = db["orderInfoCol"]
# 统计每日amount,绘制折线图
cur = col.aggregate([
{
"$group" :{
"_id":"$createdDatetime",
"amount":{"$sum":"$amount"}
}
},
{
"$sort":{"_id":1}
}
])
data = [i for i in cur]
pprint(data)
line = (
Line()
.add_xaxis([i["_id"] for i in data])
.add_yaxis("amount",[i["amount"] for i in data])
)
line.render_notebook()
#统计不同memberLevel的总amount的比例
cur = col.aggregate([
{
"$group" :{
"_id":"$customer.memberLevel",
"amount":{"$sum":"$amount"}
}
}
])
data = [i for i in cur]
pprint(data)
pie = (
Pie()
.add("amount",[(i['_id'],i['amount']) for i in data])
)
pie.render_notebook()
#统计customer的总amount
cur = col.aggregate([
{
"$group" :{
"_id":"$customer.customerName",
"amount":{"$sum":"$amount"}
}
}
])
data = [i for i in cur]
pprint(data)
bar = (
Bar()
.add_xaxis([i['_id'] for i in data])
.add_yaxis("amount",[i['amount'] for i in data])
)
bar.render_notebook()
#统计item的总quantity
cur = col.aggregate([
{
"$unwind":"$detail"
},
{
"$group" :{
"_id":"$detail.item.itemName",
"quantity":{"$sum":"$detail.quantity"}
}
}
])
data = [i for i in cur]
pprint(data)
pie = (
Pie()
.add("count",[(i['_id'],i['quantity']) for i in data])
)
pie.render_notebook()
#统计category的quantity
cur = col.aggregate([
{
"$unwind":"$detail"
},
{
"$group" :{
"_id":"$detail.item.category.category",
"quantity":{"$sum":"$detail.quantity"}
}
}
])
data = [i for i in cur]
pprint(data)
pie = (
Pie()
.add("count",[(i['_id'],i['quantity']) for i in data])
)
pie.render_notebook()
#测试数据
use orderData
show dbs
db.createCollection("orderInfoCol")
db.orderInfoCol.insert({
orderID : 100001,
customer : {customerID:1001, customerName:"1001", memberLevel:1},
amount : 900,
detail : [
{item:{itemID:10001, itemName:"10001", category:{categoryID:101, category:"101"}}, quantity:10},
{item:{itemID:10002, itemName:"10002", category:{categoryID:101, category:"101"}}, quantity:20},
{item:{itemID:10003, itemName:"10003", category:{categoryID:101, category:"101"}}, quantity:30},
{item:{itemID:10004, itemName:"10004", category:{categoryID:102, category:"102"}}, quantity:40},
{item:{itemID:10005, itemName:"10005", category:{categoryID:102, category:"102"}}, quantity:50},
{item:{itemID:10006, itemName:"10006", category:{categoryID:103, category:"103"}}, quantity:50}
],
createdDatetime : "2020-01-01"
});
db.orderInfoCol.insert({
orderID : 100002,
customer : {customerID:1002, customerName:"1002", memberLevel:2},
amount : 600,
detail : [
{item:{itemID:10002, itemName:"10002", category:{categoryID:101, category:"101"}}, quantity:40},
{item:{itemID:10003, itemName:"10003", category:{categoryID:101, category:"101"}}, quantity:60},
{item:{itemID:10004, itemName:"10004", category:{categoryID:102, category:"102"}}, quantity:80},
{item:{itemID:10005, itemName:"10005", category:{categoryID:102, category:"102"}}, quantity:100}
],
createdDatetime : "2020-01-02"
});
db.orderInfoCol.insert({
orderID : 100003,
customer : {customerID:1002, customerName:"1002", memberLevel:2},
amount : 500,
detail : [
{item:{itemID:10003, itemName:"10003", category:{categoryID:101, category:"101"}}, quantity:90},
{item:{itemID:10004, itemName:"10004", category:{categoryID:102, category:"102"}}, quantity:120},
{item:{itemID:10005, itemName:"10005", category:{categoryID:102, category:"102"}}, quantity:150}
],
createdDatetime : "2020-01-03"
});
db.orderInfoCol.insert({
orderID : 100004,
customer : {customerID:1003, customerName:"1003", memberLevel:1},
amount : 300,
detail : [
{item:{itemID:10004, itemName:"10004", category:{categoryID:102, category:"102"}}, quantity:160},
{item:{itemID:10005, itemName:"10005", category:{categoryID:102, category:"102"}}, quantity:200}
],
createdDatetime : "2020-01-04"
});
db.orderInfoCol.insert({
orderID : 100005,
customer : {customerID:1003, customerName:"1003", memberLevel:1},
amount : 400,
detail : [
{item:{itemID:10005, itemName:"10005", category:{categoryID:102, category:"102"}}, quantity:900}
],
createdDatetime : "2020-01-05"
});
db.orderInfoCol.insert({
orderID : 100006,
customer : {customerID:1003, customerName:"1003", memberLevel:1},
amount : 200,
detail : [
{item:{itemID:10005, itemName:"10005", category:{categoryID:102, category:"102"}}, quantity:900}
],
createdDatetime : "2020-01-06"
});
原文地址:https://www.cnblogs.com/lzyuid/p/12558492.html
- JMeter函数和变量11
- JMeter监听器10
- JMeter处理器09
- 保存带有emoji的文本报错解决方案
- Python:set集合、深浅拷贝与函数
- Python:numpy总结(4)
- Python: numpy总结(2)
- class 类—老司机的必修课 | 统计师的Python日记 第11课
- Python:matplotlib
- Python: matplotlib安装
- Java后端实现图片压缩技术(赞赏功能已开通,欢迎测试,噗~!)
- 我是如何得知10W+的访问量多来自工作日的 | 塔秘
- 使用百度UMeditor富文本编辑器,修改自定义图片上传,修改源码
- 【技术专栏】OpenVirteX体系结构之组件(一)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 深入浅出mongodb(二)
- 算法——快速排序
- 算法——二分查找算法
- 第一篇——Ubuntu 安装 Elasticsearch
- Ubuntu安装Redis(手动编译)
- 第五节:Activiti6.0——流程定义相关API
- 第四节:Activiti6.0——使用zip、bpmn代码生成流程图的资源部署以及资源的查询
- 第三节:Activiti6.0——Query的API使用
- 第二节:Activiti6.0配置文件的读取
- SpringMvc配置文件上传
- 使用web.xml配置SpringMvc(使用Java加载配置)
- SpringMVC配置字符过滤器的两种方式
- SpringMvc使用Json(Java配置方式)
- 使用IDEA创建SpringMvc并整合Thymeleaf(Java配置版)
- Junit报错:Argument(s) are different! Wanted: