MongoDB的安装
下载
在http://dl./dl/win32/x86_64 下载一个合适的版本,我选择了可以被Navicat Premium 15连接,文件又最小的3.3.6。
可以看到仅200MB。下载地址是http://downloads./win32/mongodb-win32-x86_64-3.3.6.zip
当然你也可以选择其他的版本。
解压
下载完成后,我们将其解压到自己喜欢的位置,例如D:\develop。
然后我将mongodb-win32-x86_64-3.3.6重命名为mongodb:
配置文件
解压后,我们通过配置文件,指定mongoDB将数据和日志存放位置。
创建文件mongo.config
内容如下(我放在了mongoDB的解压位置):
dbpath=D:\develop\mongodb\data\db
logpath=D:\develop\mongodb\data\log\mongo.log
根据配置文件,手工创建相应的目录和子目录(不需要创建文件):
D:\develop\mongodb>tree data
卷 软件 的文件夹 PATH 列表
卷序列号为 0F12-100A
D:\DEVELOP\MONGODB\DATA
├─db
└─log
安装服务
进入bin目录打开cmd,执行以下命令:
mongod --config D:\develop\mongodb\mongo.config --install --serviceName mongodb
打印内容:
D:\develop\mongodb\bin>mongod --config D:\develop\mongodb\mongo.config --install --serviceName mongodb
2021-02-25T09:53:43.974+0800 I CONTROL [main] Hotfix KB2731284 or later update is not installed, will zero-out data files
启动/关闭mongoDB
以上操作后,也不需要将mongodb加入环境变量,以后直接通过服务启动即可,命令如下:
net start mongodb
关闭mongoDB:
net stop mongodb
删除服务
前面我们注册的服务名称是mongodb,以后想删除服务只需执行以下命令即可:
sc delete mongodb - remove
配置文件详解
MongoDB的配置文件详解:
# 端口号,默认27017
#port=27017
# 数据库文件位置
dbpath=D:\develop\mongodb\data\db
#日志文件位置
logpath=D:\develop\mongodb\data\log\mongo.log
# 是否追加方式写入日志,默认True
logappend=true
# 设置绑定ip
bind_ip = 127.0.0.1
# 设置端口
port = 27017
# 是否以守护进程方式运行,默认false
fork = true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=false
# 启用日志文件,默认启用
journal=true
# 启用定期记录CPU利用率和 I/O 等待,默认false
#cpu = true
# 是否以安全认证方式运行,默认是不认证的非安全方式
#noauth = true
#auth = true
# 详细记录输出,默认false
#verbose = true
#用于开发驱动程序时验证客户端请求
#objcheck = true
# # 启用数据库配额管理,默认false
#quota = true
# 设置oplog日志记录等级,默认0
# 0=off (default)
# 1=W
# 2=R
# 3=both
# 7=W+some reads
#oplog = 0
# 是否打开动态调试项,默认false
#nocursors = true
# 忽略查询提示,默认false
#nohints = true
# 禁用http界面,默认为localhost:28017
#nohttpinterface = true
# 关闭服务器端脚本,这将极大的限制功能,默认false
#noscripting = true
# 关闭扫描表,任何查询将会是扫描失败
#notablescan = true
# 关闭数据文件预分配
#noprealloc = true
# 为新数据库指定.ns文件的大小,单位:MB
# nssize = <size>
# 用于Mongo监控服务器的Accout token。
#mms-token = <token>
# Mongo监控服务器的服务器名称。
#mms-name = <server-name>
# Mongo监控服务器的Ping间隔时间,即心跳
#mms-interval = <seconds>
# Replication Options
# 设置主从复制参数
#slave = true # 设置从节点
#source = master.example.com # 指定从节点的主节点
# Slave only: 指定要复制的单个数据库
#only = master.example.com
# or
#master = true # 设置主节点
#source = slave.example.com
# 设置副本集的名字,所有的实例指定相同的名字属于一个副本集
replSet = name
#pairwith = <server:port>
# 仲裁服务器地址
#arbiter = <server:port>
# 默认为false,用于从实例设置。是否自动重新同步
#autoresync = true
# 指定的复制操作日志(OPLOG)的最大大小
#oplogSize = <MB>
# 限制复制操作的内存使用
#opIdMem = <bytes>
# 设置ssl认证
# Enable SSL on normal ports
#sslOnNormalPorts = true
# SSL Key file and password
#sslPEMKeyFile = /etc/ssl/mongodb.pem
#sslPEMKeyPassword = pass
# path to a key file storing authentication info for connections
# between replica set members
#指定存储身份验证信息的密钥文件的路径
#keyFile=/path/to/keyfile
测试数据生成
创建js脚本,例如文件名为GenerateMongoTestData.js
:
//生成随机手机号
function getRandPhone ( ) {
var heads = [ "134" , "138" , "139" , "150" , "151" , "152" , "157" , "158" , "159" , "170" , "189" ] ;
var phone = heads[ Math. floor ( Math. random ( ) * heads. length) ] ;
var numbers = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ;
for ( var i= 0 ; i< 8 ; i++ ) {
phone+= numbers[ Math. floor ( Math. random ( ) * numbers. length) ] ;
}
return phone;
}
//生成车牌号
function getRandPlate ( ) {
//地区,用于生成车牌号
// var loc = ["川","渝","贵","陕","京","沪","粤","津","赣","湘","鄂"];
var loc = [ "川" , "渝" ] ;
//字母,用于生成车牌号
var chars = [ "A" , "B" , "C" , "D" ] ;
//数字,用于生成车牌号
var numbers = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , "J" , "K" , "L" , "M" ] ;
var plate = "" ;
plate += loc[ Math. floor ( Math. random ( ) * loc. length) ] ; //第一位地区简称
plate += chars[ Math. floor ( Math. random ( ) * chars. length) ] ; //第二位字母简称
//4位数字
for ( var i= 0 ; i< 4 ; i++ ) {
plate+= numbers[ Math. floor ( Math. random ( ) * numbers. length) ] ;
}
return plate;
}
// print(getRandPlate())
//生成名字
function getRandName ( ) {
var familyNames = [ "赵" , "钱" , "孙" , "李" , "周" , "吴" , "郑" , "王" , "冯" , "陈" ,
"褚" , "卫" , "蒋" , "沈" , "韩" , "杨" , "朱" , "秦" , "尤" , "许" ,
"何" , "吕" , "施" , "张" , "孔" , "曹" , "严" , "华" , "金" , "魏" ,
"陶" , "姜" , "戚" , "谢" , "邹" , "喻" , "柏" , "水" , "窦" , "章" ,
"云" , "苏" , "潘" , "葛" , "奚" , "范" , "彭" , "郎" , "鲁" , "韦" ,
"昌" , "马" , "苗" , "凤" , "花" , "方" , "俞" , "任" , "袁" , "柳" ,
"刘" , "鲍" , "史" , "唐" , "费" , "廉" , "岑" , "薛" , "雷" , "贺" ,
"倪" , "汤" , "滕" , "殷" , "罗" , "毕" , "郝" , "邬" , "安" , "常" ,
"乐" , "于" , "时" , "傅" , "皮" , "卞" , "齐" , "董" , "伍" , "余" ,
"元" , "卜" , "顾" , "孟" , "平" , "黄" , "和" , "谭" , "萧" , "尹"
] ;
var givenNames = [ "子璇" , "淼" , "国栋" , "夫子" , "瑞堂" , "甜" , "敏" , "尚" , "国贤" , "贺祥" , "晨涛" ,
"昊轩" , "易轩" , "益辰" , "益帆" , "益冉" , "瑾春" , "瑾昆" , "春齐" , "杨" , "文昊" ,
"东东" , "雄霖" , "浩晨" , "熙涵" , "溶溶" , "冰枫" , "欣欣" , "宜豪" , "欣慧" , "建政" ,
"美欣" , "淑慧" , "文轩" , "文杰" , "欣源" , "忠林" , "榕润" , "欣汝" , "慧嘉" , "新建" ,
"建林" , "亦菲" , "林" , "冰洁" , "佳欣" , "涵涵" , "禹辰" , "淳美" , "泽惠" , "伟洋" ,
"涵越" , "润丽" , "翔" , "淑华" , "晶莹" , "凌晶" , "苒溪" , "雨涵" , "嘉怡" , "佳毅" ,
"子辰" , "佳琪" , "紫轩" , "瑞辰" , "昕蕊" , "萌" , "明远" , "欣宜" , "泽远" , "欣怡" ,
"佳怡" , "佳惠" , "晨茜" , "晨璐" , "运昊" , "汝鑫" , "淑君" , "晶滢" , "润莎" , "榕汕" ,
"佳钰" , "佳玉" , "晓庆" , "一鸣" , "语晨" , "添池" , "添昊" , "雨泽" , "雅晗" , "雅涵" ,
"清妍" , "诗悦" , "嘉乐" , "晨涵" , "天赫" , "玥傲" , "佳昊" , "天昊" , "萌萌" , "若萌" ,
"泽民" , "国强" , "胜利" , "小凡" , "碧瑶" , "书书" , "京雨" , "卫东" , "小佳" , "长江" ,
"文虹" , "义凡" , "广晨" , "宸滔" , "嘉岐" , "雅珺" , "睿明" , "皓轩" , "程天" , "子酝" ,
"艾康" , "如羽" , "冠玉" , "子歉" , "永昊" , "龙华" , "兆颜" , "奇文" , "月昕" , "裕锦" ,
"昂佳" , "昊浩" , "宇韬" , "睿焓" , "永译" , "鸿彬" , "颢霖" , "益彬" , "虹昊" , "飞悦" ,
"睿珏" , "?宵童" , "睿鸿" , "容冰" , "逸濠" , "楷岩" , "弘义" , "海萦" , "昊孺" , "梓铭" ,
"生钊" , "蓝玺" , "晨辕" , "宇菡" , "砚海" , "文揩" , "韬瑞" , "彦红" , "奕韦" , "清予" ,
"宁翼" , "冬睿" , "锦昌" , "烨宁" , "昌权" , "国研" , "德运" , "孝清" , "佳阳" , "凯玮" ,
"正真" , "民云" , "昕冶" , "力威" , "帅欣" , "知淳" , "烨飞" , "兴远" , "子墨" , "澄欣" ,
"烨煊" , "悦勤" , "晨津" , "博宏" , "育萌" , "羽炫" , "绍钧" , "睿昌" , "泓千" , "颢炜" ,
"虹金" , "筠航" , "元甲" , "星明" , "景涛" , "铭虹" , "德本" , "向辉" , "基翔" , "家易" ,
"欣鹏" , "羽荃" , "泽容" , "弘亮" , "尚廷" , "轩梓" , "甫津" , "彬楷" , "寅飞" , "愉君" ,
"阳平" , "誉杰" , "钦昭" , "蕴藉" , "羽程" , "宏海" , "涵畅" , "光浩" , "令沂" , "浩浩" ,
"睿锦" , "易泽" , "俊康" , "家文" , "晨元" , "语洋" , "裕宏" , "梓榛" , "阳嘉" , "恒展" ,
"雨远" , "哲伊" , "逸江" , "丰源" , "学东" , "奇岩" , "浩财" , "和蔼" , "红言" , "瑞赫" ,
"森圆" , "欣赢" , "梓鸿" , "博明" , "铭育" , "颢硕" , "宇烯" , "宇如" , "淳炎" , "源承"
] ;
var name = familyNames[ Math. floor ( Math. random ( ) * familyNames. length) ] ;
name+= givenNames[ Math. floor ( Math. random ( ) * givenNames. length) ] ;
return name;
}
// print(getRandName())
// 生成随机专业
function getRandMajor ( ) {
return [ "大数据" , "应用数学" , "应用统计" ] [ Math. floor ( Math. random ( ) * 3 ) ]
}
// print(getRandMajor())
// 随机取一门课程
function getRandCourse ( ) {
var courses = [ "大数据概论" , "大数据开发语言" , "Hadoop大数据技术" ,
"分布式数据库原理与应用" , "网络操作系统" , "结构化数据存储与应用" ,
"数据导入与预处理应用" , "数据可视化技术" , "数据仓库与挖掘技术" ,
"时间序列分析实践" , "大数据分析与内存计算"
] ;
var credits = [ 2 , 4 , 4 ,
4 , 2 , 2 ,
4 , 2 , 4 ,
4 , 4
] ;
var idx = Math. floor ( Math. random ( ) * courses. length) ;
var course = [ courses[ idx] , credits[ idx] ] ;
return course;
}
// 生成学生数据
function generateStudents ( snum= 100 , sgrade= 2020 , overwrite= true , sharding= true ) {
db = db. getSiblingDB ( "cqust" ) ;
if ( sharding) {
sh. enableSharding ( "cqust" ) ;
}
if ( overwrite) {
db. getCollection ( "students" ) . drop ( ) ;
if ( sharding)
sh. shardCollection ( "cqust.students" , { "sno" : "hashed" } ) ;
}
for ( var i= 0 ; i< snum/ 100 ; i++ ) {
var StudentsDoc = new Array ( ) ;
for ( var j= 0 ; j< 100 ; j++ ) {
var sid = sgrade* 1e6 + i* 100 + j;
var sname = getRandName ( ) ;
var gender = Math. floor ( Math. random ( ) * 2 ) ;
var phone = getRandPhone ( ) ;
var plate = getRandPlate ( ) ;
var major = getRandMajor ( ) ;
var height = Math. floor ( Math. random ( ) * 30 + gender* 5 + 150 ) ;
var sclass = Math. floor ( Math. random ( ) * 4 + 1 ) ;
var courses = new Array ( ) ;
for ( var k= 0 ; k< Math. floor ( Math. random ( ) * 5 ) ; k++ ) {
var course_credit = getRandCourse ( ) ;
courses[ k] = { "course" : course_credit[ 0 ] , "credit" : course_credit[ 1 ] , "score" : Math. floor ( Math. random ( ) * 50 ) + 50 } ;
}
StudentsDoc[ j] = {
"name" : sname,
"gender" : gender,
"height" : height,
"phone" : phone,
"role" : "student" ,
"sno" : sid,
"major" : major,
"grade" : sgrade,
"class" : sclass,
"courses" : courses
} ;
}
db. getCollection ( "students" ) . insertMany ( StudentsDoc) ;
}
}
// 主程序从这里开始
generateStudents ( 10000 , 2015 , false , false ) ;
generateStudents ( 10000 , 2016 , false , false ) ;
generateStudents ( 10000 , 2017 , false , false ) ;
generateStudents ( 10000 , 2018 , false , false ) ;
generateStudents ( 10000 , 2019 , false , false ) ;
执行脚本:
D:\develop\mongodb\bin>mongo ../GenerateMongoTestData.js
2021-02-25T10:14:43.410+0800 I CONTROL [main] Hotfix KB2731284 or later update is not installed, will zero-out data files
MongoDB shell version: 3.3.6
connecting to: test
D:\develop\mongodb\bin>
通过Navicat Premium 15可以查看到插入的测试数据: