本文共 6587 字,大约阅读时间需要 21 分钟。
数据库主要分成两种:
一、关系型数据库(RDBMS) ·MySQL、Oracle、DB2、SQL Server…… ·关系数据库中全都是表 二、非关系型数据库 ·MongoDB、Redis…… ·键值对数据库 ·文档数据库MongoDBMongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON。(BSON—二进制的 JSON)
1.数据库(database)
数据库是一个仓库,在仓库中可以存放集合。 2.集合(collection) 集合类似于数组,在集合中可以存放文档。 3.文档(document) 文档数据库中的最小单位,我们存储和操作的内容都是文档。·MongoDB安装包下载地址:
·MongoDB的版本偶数版本为稳定版,奇数版本为开发版。
·MongoDB对于32位系统支持不佳,所3.2版本以后没有再对32位系统的支持。一、安装MongoDB
二、配置环境变量
1.找到安装目录 D:\software\MongoDB\Server\3.6\bin
2.
3.检查安装成功没有
在c盘 根目录下创建一个 文件夹 data 再在data下面创建一个文件夹db
4.启动 MongoDB 服务器 (数据库的服务器,用来存储数据的)
启动方法一:打开cmd 命令窗口,输入 mongod 启动 mongodb 服务器
启动方法二:若想要自定义数据存储位置 和 MongoDB 服务器使用的 端口号
则启动时候可以输入 mongod --dpath D:\data\db --port 123
5.连接MongoDB服务器(数据库的客户端,用来操作数据)
第4步的窗口不要关闭,再打开一个 cmd 命令窗口,输入 mongo 结尾处出现 “ > ” 则表示连接成功
将MongoDB设置为系统服务,可以自动在后台启动,不需要每次都手动重启
1.在 D 盘根目录下创建 文件夹
cd D:\mkdir D:\data\dbmkdir D:\data\log
2.在安装目录下面创建配置文件
D:\software\MongoDB\Server\3.6\mongod.cfg
3.在配置文件中添加内容,写 日志路径 和 数据存储路径
systemLog: destination: "file" path: "c:\\data\\log\\mongod.log"storage: dbPath: "c:\\data\\db"
4.以管理员方式打开cmd ,执行以下命令
sc.exe create MongoDB binPath= "\"D:\software\MongoDB\Server\3.6\bin\mongod.exe\" --service --config=\"D:\software\MongoDB\Server\3.6\mongod.cfg\"" DisplayName= "MongoDB" start= auto
5.启动MongoDB 服务,打开 任务管理器 ,找到 MongoDB 服务 右键启动
6.如果启动失败,证明上边的操作有误,在控制台输入 sc delete MongoDB 删除之前配置的服务然后从第一步再来一次
查看几个数据
show dbs
进入数据库
use 数据库名
查看当前所在数据库
db
查看数据库中有几个集合
show collections
**注意:**在MongoDB中不需要手动创建 数据库 和 集合,当我们在创建文档时,如果文档所在的集合或数据库不存在 则 自动创建数据库 和 集合
数据库的CRUD的操作 官网文档:
操作语法文档下载路径:
向数据库中插入文档 db 代表当前数据库
db.集合名.insertOne(doc)
例:
db.inventory.insertOne( { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } })/* 插入数据*/db.inventory.insert([ { name:"测试",age:18,sex:0,hobby:"篮球",test:true}, { name:"测试2",age:19,sex:1,hobby:"篮球2",test:false}, { name:"测试3",age:20,sex:0,hobby:"篮球3",test:true}]);/* 查询 */db.inventory.find({ });/* 调用此方法可以生成id */ObjectId();/* 可以自定义id */db.inventory.insert( { _id:"helloworld",name:"测试",age:18,sex:0,hobby:"篮球",test:true} )
# 插入的方法db.collection.insertOne() 插入 一个 文档到 一个集合db.collection.insertMany() 插入 多个 文档到 一个集合db.collection.insert() 插入 一个 或 多个 文档到 一个集合
查询数据
/* 查询 在find 里面输入查询条件 find() 返回的是一个数组 findOne() 返回的是一个对象*/db.inventory.find({ });/* 取返回数组的第一个对象 */db.inventory.find({ age:18})[0];db.inventory.find({ age:18})[0].name;/* 多条件查询 */db.inventory.find({ age:18,_id:"helloworld"});/* findOne 返回的是一个对象 */db.inventory.findOne({ age:18}).name;/* .count() 是统计数目 */db.inventory.find({ age:18}).count();
修改操作
/* 修改 db.collection.update(查询条件,新对象) update() 默认情况下会使用新对象来替换旧的对象, update() 默认情况只会修改一个 如果需要修改指定的属性 $set:{ } $unset:{ } 可以用来删除文档的指定属性*/db.inventory.find();/* - update() 默认情况下会使用新对象来替换旧的对象 */db.inventory.update({ _id:"helloworld"},{ age:20});/* 如果需要修改指定的属性 $set:{ } */db.inventory.update( { _id:"helloworld"}, { $set:{ age:21, name:"姓名" }});/* $unset:{ } 可以用来删除文档的指定属性 */db.inventory.update( { _id:"helloworld"}, { $unset:{ hobby:"123" }});/* updateMany 可以修改多个 */db.inventory.updateMany( { age:18}, { $set:{ hobby:"123" }});/* update 加上 multi属性后可以修改多个 */db.inventory.update( { age:18}, { $set:{ hobby:"234" }}, { multi:true });
删除数据
/* db.collection.remove() db.collection.deleteOne() db.collection.deleteMany()*//* 默认情况会删除符合条件的多个 */db.inventory.remove({ age:18});/* 若果用remove删除一个 后面加一个boolean值是否删除一个 则 */db.inventory.remove({ age:18}, true);/* 删除 集合 */db.inventory.drop();/* 删除当前数据库 */db.dropDatabase();
部分高级查询:
//13.查尊喜欢电影hero的文档//MongoDB支直接通过内获文档的属性进行查询,如果要查询内鼓文档则可以通过。的形式来匹配//如果要通过内蒙文档来对文档进行查询,此时属性名必须使用引号db.users.find({ 'hobby.movies':"hero"});//14.向tangsengp添加一个新的电影Interstellar//$push 用于向数组中添加一个薪的元素//$addToSet 用于向数组中添加一个薪的元素,但是不会重复,若存在重复的则 不会再添加db.users.update({ username:"tangseng"},{ $push:{ "hobby.movies":"Interstellar"}});db.users.update({ username:"tangseng"},{ $addToSet:{ "hobby.movies":"Interstellar"}});//17.向numbers中插入20000条数for(var i=l;i<=20000;i++){ db.numbers.insert({ num:i})};var arr = [];for (var i=1 ; i <= 20000 ; i++) { arr.push({ num:i});}db.numbers.insert(arr);//21.查尊numbers中 numt于40小于50的文档db.numbers.find({ num:{ $gt:40,$1t:50}});// limit() 设置显示数据的上限// 查看前 10 条db.numbers.find().limit(10);// 查看第 11 到 20// skip( (页码 -1)* 每页显示条数) ).limit(每页显示条数)db.numbers.find().skip(10).limit(10);
部分高级练习:
/* 27.查询工资小于2000的员工 */db.emp.find({ sal:{ $lt:2000}});/* 28.查询工资在1000-2000之间的员工 */db.emp.find({ sal:{ $gt:1000,$lt:2000}});/* 29.查询工资小于1000或大于2500的员工 lt 小于 gt 大于 */db.emp.find({ $or:[{ sal:{ $lt:1000}},{ sal:{ $gt:2500}}]});/* 30.查询财务部的所有员工 */var deptno = db.dept.findOne({ dname:"财务部"}).deptno;db.emp.find({ depno:deptno});/* 32.查询所有mgr为7698的所有员工 */db.emp.find({ mgr:7698});/* 多条件查询 */db.emp.find({ mgr:7698,empno:7499});/* 33.为所有薪资低于1000的员工增加工资400元 inc 自增*/db.emp.updateMany({ sal:{ $lte:1000}},{ $inc:{ sal:400}});/* sort() 可以用来指定文档的排序规则,sort() 需要传递一个对象来指定排序规则 *//* 1表示升序 -1表示降序 */db.emp.find({ }).sort({ sal:1,empno:-1});// limit skip sort 可以任意的顺序进行调用 skip 和 limit 用来分页 例:当前页从1开始 skip((当前页数-1)*每页显示条数).limit(每页显示条数)db.emp.find({ }).sort({ sal:1,empno:-1}).skip(0).limit(10);// 在查询时,可以在 第二个参数的位置 来设置查询结果 投影 id默认都会显示db.emp.find({ },{ ename:1});// 显示 name 和 sal _id为0则表示不显示db.emp.find({ },{ ename:1,_id:0,sal:2});
MongoDB 图形化管理工具 https://www.mongodbmanager.com/download
MongoDB中的数据关系:
/* 一对一 one to one 一对多 one to many / 多对一 many to one 多对多 many to many*//* 一对一 */db.wifeAndHusband.insert([ { name:"黄蓉”, husband:{ name:"郭靖" } }, { name:"A同学”, husband:{ name:"B同学" } }]);/* 一对多 用户 和 订单 */db.users.insert([ { username:"swk" },{ username:"zbj" }]);db.order.insert({ list:["苹果”,”香蒸”,”大鸭梨”], user_id:ObjectId("59c47e35241d8d36ald50ddf")});//查拨用户SWk的订单var user_id=db.users.findOne({username:"zbj"})._id;db.order.find({user_id:user_id});/* 多对多 */db.teachers.insert([ {name:"洪七公"}, {name:"黄药师"}, {name:"龟仙人"}]);db.stus.insert([ { name:"郭靖”, tech_ids:[ ObjectId("59c4806d241d8d36ald50de4"), ObjectId("59c4806d241d8d36a1d50de5") ] }, { name:"孙福空”, tech_ids:[ ObjectId("59c4806d241d8d36ald50dfr3"), ObjectId("59c4806d241d8d36a1d50dc6") ] }]);
转载地址:http://zhxxi.baihongyu.com/