分享

MongoDB的安装

 小小明代码实体 2021-11-30

MongoDB的安装

下载

http://dl./dl/win32/x86_64下载一个合适的版本,我选择了可以被Navicat Premium 15连接,文件又最小的3.3.6。

image-20210225091907584

可以看到仅200MB。下载地址是http://downloads./win32/mongodb-win32-x86_64-3.3.6.zip

当然你也可以选择其他的版本。

解压

下载完成后,我们将其解压到自己喜欢的位置,例如D:\develop。

然后我将mongodb-win32-x86_64-3.3.6重命名为mongodb:

image-20210225092723985

配置文件

解压后,我们通过配置文件,指定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可以查看到插入的测试数据:

image-20210225101846596

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多