MongoDB

Posted 郭东东郭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB相关的知识,希望对你有一定的参考价值。

一、安装

1. 相关

https://www.mongodb.org/dl/win32/

  • MongoDB的版本偶数版本为稳定版,奇数版本为开发版
  • MongoDB对于32位系统支持不佳,所以3.2版本以后没有再对32位系统的支持

2.配置步骤:

  • 下载,安装,将安装后的bin目录配置到环境变量里

  • C盘根目录创建 data/db

  • cmd : mongod 可启动MongoDB服务器,(32位系统第一次启动,输入 mongod --storageEngine=mmapv1)

  • 指定端口和路径:mongod --dbpath 路径 --port 端口号 更改端口号,mongod --dbpath C:UsersdxuanDesktopdatadb --port 123

    ?

3.将MongoDB配置为系统服务:

可以自动在后台启动,不需要每次都启动

(1) mkdir c:datalog

(2)建配置文件:mongod.cfg

4. 可视化工具

NoSQL Manage for MongoDB ,用这个可视化工具,MongoDB默认端口号为 27017

?

二、使用

1.mongoDB的基本指令

show dbs:显示当前所有的数据库
use 数据库名  :进入到指定数据库中
db:显示当前所在的数据库
show collections:显示数据库中的所有集合

?

2. 基本使用

//1.创建并进入it_like数据库
use it_like; // 有这个数据则进去,没有则创建
db
//2.向数据库的colleges集合中插入六个文档(html5, Java, Python, 区块链, K12, <php, "世界上最好的编程语言">)  
db.colleges.insert([
    {name:'Html5'},
    {name:'Java'},
    {name:'Python'},
    {name:'区块链'},
    {name:'K12'},
    {name:'PHP',intro:'世界上最好的编程语言'}
]); 
//如果有colleges 这个集合,则进入,没有,则创建

//3.查询colleges集合中的文档
db.colleges.find({}); //查找所有
db.colleges.find({name:'PHP'});

//4.向数据库的colleges集合中插入一个文档(Golang)  
db.colleges.insert({name:'Golang'})  ;
//5.统计数据库colleges集合中的文档数量
db.colleges.find({}).count()

//6.查询数据库colleges集合中name为Html5的文档
db.colleges.find({name:'Html5'})

//7.向数据库colleges集合中的name为Html5的文档,添加一个intro属性
db.colleges.update({name:'Html5'},{$set:{intro:'Hi,我是詹姆士邦德'}}) //给html5 增加intro
db.colleges.find()

//8.使用{name:"大数据"} 替换 name 为 "K12"的文档   
db.colleges.replaceOne({name:'K12'},{name:'大数据'});

//9.删除name为PHP的文档的intro属性
db.colleges.update({name:'PHP'},{$unset:{intro:1}}) //1表示任意的东西

//10.向name为Html5的文档中,添加一个classes:{base:["h5+c3","js","jQuery", "abc"] , core:["三大框架","node.js"]}
db.colleges.update({name:'Html5'},{$set:{classes:{base:["h5+c3","js","jQuery", "abc"] , core:["三大框架","node.js"]}}});

//11.查询有核心课程为 三大框架 的文档
db.colleges.find({'classes.core':'三大框架'})

//12.向name为Html5的文档中,添加一个新的核心课程 "微信小程序"
//  $push: 向数组中添加一个新元素
// $addToSet: 向数组中添加一个新元素,区别在于,如果数组中存在这个元素,则不会重复添加
db.colleges.update({name:'Html5'},{$push:{'classes.core':'微信小程序'}});
db.colleges.update({name:'Html5'},{$addToSet:{'classes.core':'幽灵党'}})
db.colleges.find();

//13.,删除课程为"abc"的文档
db.colleges.remove({'classes.base':'abc'}); 

//14.删除colleges集合
db.colleges.remove({});
db.colleges.drop(); //删除数据库


use gjd_database;
show dbs
//15.向集合中中插入10000个文档 
// 方式1   4.3s
for(var i=0;i<10000;i++){
    db.demos.insert({no:i});
    }
    
// 方式2   0.3s
db.demos.remove({});
var arr = [];
for(var i=1;i<10000;i++){
    arr.push({counter:i});
}
db.demos.insert(arr);


//16.查询demos中counter为666的文档
db.demos.find({counter:666});

//17.查询demos中counter小于168的文档
db.demos.find({counter:{$lt:168}});
//18.查询demos中counter大于666的文档
db.demos.find({counter:{$gt:666}})
//19.查询demos中counter大于66小于666的文档
db.demos.find({counter:{$lt:666,$gt:66}})
//20.查看demos集合中的前10条数据
db.demos.find({counter:{$lte:10}});
db.demos.find({}).limit(10);
//21.查看demos集合中的第11条到20条数据
/*
   1-10     1
   11-20    2
   21-30    3
   ...
   公式:skip((页码-1) * 每页显示的条数).limit(每页显示的条数)

*/
db.demos.find({}).skip((2-1)*10).limit(10);
//22.查看demos集合中的第21条到30条数据
db.demos.find({}).skip(20).limit(10);


?

?

3.多表联查

//23. 创建company数据库, 将con和tea集合导入到数据库中
db.con.insert([
   {cno: "1001", cname: "HTML5学院"},
   {cno: "1002", cname: "Python学院"},
   {cno: "1003", cname: "Java学院"},
   {cno: "1004", cname: "Go学院"}
   ]);

db.tea.insert([
  {name: "胡雪", job: "辅导员", wages: 10000.0, cno: "1001", bonus: 1688},
  {name: "赵乐乐", job: "讲师", wages: 20000.0, cno: "1001", bonus: 2600},
  {name: "冯璐璐", job: "辅导员", wages: 12000.0, cno: "1001"},
  {name: "赵晓雪", job: "辅导员", wages: 12000.0, cno: "1002", bonus: 1688},
  {name: "孙芙蓉", job: "讲师", wages: 13000.0, cno: "1002", bonus: 1288},
  {name: "胡霍恋", job: "辅导员", wages: 11000.0, cno: "1003", bonus: 2688},
  {name: "张思琪", job: "班主任", wages: 9000.0, cno: "1003"},
  {name: "王红叶", job: "辅导员", wages: 8000.0, cno: "1002", bonus: 1675},
  {name: "叶子奇", job: "高级讲师", wages: 30000.0, cno: "1001", bonus: 2345},
  {name: "高伟伟", job: "辅导员", wages: 17000.0, cno: "1002", bonus: 1345}
  ]);

//24.查询HTML5学院的所有老师
var cno = db.con.findOne({cname:'HTML5学院'}).cno;
db.tea.find({cno:cno});


//25.查询工资大于20000的员工
db.tea.find({wages:{$gt:20000}})
//26.查询工资在10000-20000之间的员工
db.tea.find({wages:{$gt:10000,$lt:20000}})
//27.查询工资小于10000或大于25000的员工
db.tea.find({$or:[{wages:{$lt:10000}},{wages:{$gt:25000}}]})
//28.为所有薪资低于10000的员工增加工资1000元
db.tea.updateMany({wages:{$lt:10000}},{$inc:{wages:1000}})

三、Mongoose

1、Mongoose 说明

  • 个让我们可以通过Node来操作MongoDB的模块。

  • http://mongoosejs.com/

  • Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。

    ?

    ?

mongoose的优势:

可以为文档创建一个模式结构(Schema)
可以对模型中的对象/文档进行验证
数据可以通过类型转换转换为对象模型
可以使用中间件来应用业务逻辑挂钩
比Node原生的MongoDB驱动更容易

以上是关于MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

mongodb关联查询

无法在 MongoDB(猫鼬)文档中追加数组

在 Spring MongoDB 的 ReplaceRoot 管道阶段使用 $mergeObjects

如何创建一个查询来查找 2 个数字之间的值,这些数字是 MongoDB 中的字符串类型

MongoDB GridFS