mongo学习之路

mongodb的安装,在这里就不做介绍了,不管是windows还是mac,网上都有教程,可以自行学习一下~~~

一、启动

mongod
复制代码

二、链接

mongo
复制代码

三、关闭链接

db.shutdownServer()
复制代码

四、命令

1、查看数据库
show dbs
复制代码
2、进入数据库
use + 数据库名
复制代码
3、显示数据库中的集合
show collections
复制代码
4、显示当前位置
db
复制代码

五、基础操作命令

1、使用数据库
use user
复制代码
2、新建集合和插入数据文件
db.user.insert({"name": "xiaoying"})
复制代码
3、查询所有数据
db.user.find()
复制代码
4、查询第一个文件数据
db.user.findOne()
复制代码
5、修改文件数据,db.集合.update({查询},{修改})
db.user.update({name: "xiaoying"},{"name":"xiaoying", "age":12})
复制代码
6、删除文件数据
db.user.remove({name: "xiaoying"})
复制代码
7、删除整个集合
db.user.drop()
复制代码
8、删除整个数据库
db.dropDatebase()
复制代码

以上都是在控制台的操作命令,下边是使用js编写命令。

第一节 模拟登陆日志表信息

--goTask.js--var userName = 'xiaoying'
var timeSart = Date.parse(new Date())
var jsonDatabase = {"loginName": userName,"loginTime": timeSart
}var db = connect('log') // 相当于use  不能用let声明
db.login.insert(jsonDatabase)print("[demo] log print success")
复制代码
打开控制台输入 load('./goTask.js' 执行成功~
load('goTask.js')
connecting to: mongodb://127.0.0.1:27017/log
MongoDB server version: 3.6.5
[demo] log print success
true
复制代码
查看下插入结果
> db.login.find()
{ "_id" : ObjectId("5c99ab77847a0ad420df98f0"), "loginName" : "xiaoying", "loginTime" : 1553574775000 }
复制代码

第二节 批量插入的正确姿势

--demo01.js---

// 批量创建用户
var workmate1={name:'xiaoying',age:33,sex:1,job:'前端',skill:{skillOne:'HTML+CSS',skillTwo:'JavaScript',skillThree:'PHP'},regeditTime:new Date(),interest:[]
}
var workmate2={name:'ShengLei',age:31,sex:1,job:'JAVA后端',skill:{skillOne:'HTML+CSS',skillTwo:'J2EE',skillThree:'PPT'},regeditTime:new Date(),interest:[]
}
var workmate3={name:'MinJie',age:18,sex:0,job:'UI',skill:{skillOne:'PhotoShop',skillTwo:'UI',skillThree:'PPT'},regeditTime:new Date(),interest:[]
}
var workmate4={name:'XiaoWang',age:25,sex:1,job:'UI',skill:{skillOne:'PhotoShop',skillTwo:'UI',skillThree:'PPT'},regeditTime:new Date(),interest:[]
}
var workmate5={name:'LiangPeng',age:28,sex:1,job:'前端',skill:{skillOne:'HTML+CSS',skillTwo:'JavaScript',},regeditTime:new Date(),interest:[]
}
var workmate6={name:'HouFei',age:25,sex:0,job:'前端',skill:{skillOne:'HTML+CSS',skillTwo:'JavaScript',},regeditTime:new Date(),interest:[]
}
var workmate7={name:'LiuYan',age:35,sex:0,job:'美工',skill:{skillOne:'PhotoShop',skillTwo:'CAD',},regeditTime:new Date(),interest:[]
}
var workmate8={name:'DingLu',age:20,sex:0,job:'美工',skill:{skillOne:'PhotoShop',skillTwo:'CAD',},regeditTime:new Date(),interest:[]
}
var workmate9={name:'JiaPeng',age:29,sex:1,job:'前端',skill:{skillOne:'HTML+CSS',skillTwo:'JavaScript',skillThree:'PHP'},regeditTime:new Date(),interest:[]
}
var workmate10={name:'LiJia',age:26,sex:0,job:'前端',skill:{skillOne:'HTML+CSS',skillTwo:'JavaScript',skillThree:'PHP'},regeditTime:new Date(),interest:[]
}
// 使用company数据库
var db=connect('company');
var workmateArray=[workmate1,workmate2,workmate3,workmate4,workmate5,workmate6,workmate7,workmate8,workmate9,workmate10];
// 给company数据库中的workmate表插入数据
db.workmate.insert(workmateArray);
print('[SUCCESS]:The data was inserted successfully');
复制代码
查看插入结果
>db.workmate.find()
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a000"), "name" : "xiaoying", "age" : 33, "sex" : 1, "job" : "前端", "skill" : { "skillOne" : "HTML+CSS", "skillTwo" : "JavaScript", "skillThree" : "PHP" }, "regeditTime" : ISODate("2019-03-27T08:08:06.469Z"), "interest" : [ ] }
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a001"), "name" : "ShengLei", "age" : 31, "sex" : 1, "job" : "JAVA后端", "skill" : { "skillOne" : "HTML+CSS", "skillTwo" : "J2EE", "skillThree" : "PPT" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z"), "interest" : [ ] }
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a002"), "name" : "MinJie", "age" : 18, "sex" : 0, "job" : "UI", "skill" : { "skillOne" : "PhotoShop", "skillTwo" : "UI", "skillThree" : "PPT" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z"), "interest" : [ ] }
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a003"), "name" : "XiaoWang", "age" : 25, "sex" : 1, "job" : "UI", "skill" : { "skillOne" : "PhotoShop", "skillTwo" : "UI", "skillThree" : "PPT" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z"), "interest" : [ ] }
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a004"), "name" : "LiangPeng", "age" : 28, "sex" : 1, "job" : "前端", "skill" : {"skillOne" : "HTML+CSS", "skillTwo" : "JavaScript" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z"), "interest" : [ ] }
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a005"), "name" : "HouFei", "age" : 25, "sex" : 0, "job" : "前端", "skill" : { "skillOne" : "HTML+CSS", "skillTwo" : "JavaScript" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z"), "interest" : [ ]}
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a006"), "name" : "LiuYan", "age" : 35, "sex" : 0, "job" : "美工", "skill" : { "skillOne" : "PhotoShop", "skillTwo" : "CAD" }, "regeditTime" : ISODate("2019-03-27T08:08:06.471Z"), "interest" : [ ] }
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a007"), "name" : "DingLu", "age" : 20, "sex" : 0, "job" : "美工", "skill" : { "skillOne" : "PhotoShop", "skillTwo" : "CAD" }, "regeditTime" : ISODate("2019-03-27T08:08:06.471Z"), "interest" : [ ] }
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a008"), "name" : "JiaPeng", "age" : 29, "sex" : 1, "job" : "前端", "skill" : { "skillOne" : "HTML+CSS", "skillTwo" : "JavaScript", "skillThree" : "PHP" }, "regeditTime" : ISODate("2019-03-27T08:08:06.471Z"), "interest" : [ ] }
{ "_id" : ObjectId("5c9b2f6650a0b17e32e5a009"), "name" : "LiJia", "age" : 26, "sex" : 0, "job" : "前端", "skill" : { "skillOne" : "HTML+CSS", "skillTwo" : "JavaScript", "skillThree" : "PHP" }, "regeditTime" : ISODate("2019-03-27T08:08:06.471Z"), "interest" : [ ] }
复制代码

批量插入性能测试

// 循环插入
var startTime = (new Date()).getTime(); //得到开始时间
var  db = connect('log');  //链接数据库
//开始循环
for(let i=0;i<1000;i++){db.test.insert({num:i});
}
var runTime = (new Date()).getTime()-startTime;//计算时间差
print ('This run this is:'+runTime+'ms');//打印出来
复制代码
循环运行时间查看
load('./demo02.js')
connecting to: mongodb://127.0.0.1:27017/log
MongoDB server version: 3.6.5
This run this is:539ms
true
复制代码
// 批量插入
var startTime = (new Date()).getTime();
var  db = connect('log');
var tempArray = []              //声明一个数组
for(let i=0;i<1000;i++){        //循环向数组中放入值tempArray.push({num:i});
}
db.test.insert(tempArray)       //批量一次插入
var runTime = (new Date()).getTime()-startTime;
print ('This run this is:'+runTime+'ms');
复制代码
批量运行时间查看
load('./demo02.js')
connecting to: mongodb://127.0.0.1:27017/log
MongoDB server version: 3.6.5
This run this is:22ms
true
复制代码
======很明显,批量运行时间远远小于循环插入时间,所以开发过程中肯定是要用批量插入而不是循环插入。======

第三节 修改:update修改器

1、$set修改器
dbd .workmate.update({"name":"MinJie"},{"$set":{sex:2,age:21}})//修改嵌套内容(内嵌文档  {}类型)
db.workmate.update({"name":"MinJie"},{"$set":{"skill.skillThree":'word'}})复制代码
2、$unset 删除key
db.workmate.update({name: 'huahua'},{"$unset":{age:''}})
复制代码
3、$inc 对数字进行计算
db.workmate.update({name: 'huahua'},{"$inc":{age:+5}})
复制代码
4、multi选项(boolean类型 true: 表示每条数据都做更改 false:只修改第一条)
db.workmate.update({},{$set:{interset:[]}},{multi:true})
复制代码
5、upsert选项(true代表没有就添加,false代表没有不添加(默认值))。
db.workmate.update({name:'xiaoWang'},{$set:{age:20}},{upsert:true})
复制代码
6、$push追加数组/内嵌文档值
db.workmate.update({name:'xiaoWang'},{$push:{interest:'draw'}})// 内嵌文档push
db.workmate.update({name:'MinJie'},{$push:{"skill.skillFour":'draw'}})
复制代码
7、$ne查找是否存在(没有则修改,有则不修改)
db.workmate.update({name:'xiaoWang',"interest":{$ne:'playGame'}},{$push:{interest:'Game'}})
复制代码
8、ne
db.workmate.update({name:"xiaoWang"},{$addToSet:{interest:"readBook"}})
复制代码
9、$each 批量追加
var newInterset=["Sing","Dance","Code"];
db.workmate.update({name:"xiaoWang"},{$addToSet:{interest:{$each:newInterset}}})
复制代码
10、$pop 删除数组值
  • 1:从数组末端进行删除
  • -1:从数组开端进行删除
db.workmate.update({name:'xiaoWang'},{$pop:{interest:1}}//数组定位修改
db.workmate.update({name:'xiaoWang'},{$set:{"interest.2":"Code"}})
复制代码

第四节 应答式操作

db.runCommand( )

它是数据库运行命令的执行器,执行命令首选就要使用它,因为它在Shell和驱动程序间提供了一致的接口。(几乎操作数据库的所有操作,都可以使用runCommand来执行)现在我们试着用runCommand来修改数据库,看看结果和直接用db.collections.update有什么不同。

var myModify = {findAndModify: "workMate",query: {name: 'xiaoying'},update: {$set: {age: 10}},new: true 更新完成,需要查看结果,如果为false不进行查看结果
}var resultMsg = db.runCommand(myModify)printjson(resultMsg)
复制代码
运行结果:
load('./demo04.js')
{"lastErrorObject" : {"n" : 0,"updatedExisting" : true // 表示更新完毕},"value" : null,"ok" : 1
}
true
复制代码
findAndModify的性能是没有直接使用db.collections.update的性能好,但是在实际工作中都是使用它,毕竟要商用的程序安全性还是比较重要的。
findAndModify属性值:
  • query:需要查询的条件/文档
  • sort: 进行排序
  • remove:[boolean]是否删除查找到的文档,值填写true,可以删除。
  • new:[boolean]返回更新前的文档还是更新后的文档。
  • fields:需要返回的字段
  • upsert:没有这个值是否增加。

第五节 查询:find的不等修饰符

// 所有注册时间大于某个时间人
var startDate  =  new Date('01/01/2018')
db.workmate.find({regeditTime: {$gt: startDate}},{name: 1, "skill.skillOne": 1, _id: 0, age: 1, regeditTime: 1}
)
复制代码
运行结果
{ "name" : "xiaoying", "age" : 33, "skill" : { "skillOne" : "HTML+CSS" }, "regeditTime" : ISODate("2019-03-27T08:08:06.469Z") }
{ "name" : "ShengLei", "age" : 31, "skill" : { "skillOne" : "HTML+CSS" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z") }
{ "name" : "MinJie", "age" : 18, "skill" : { "skillOne" : "PhotoShop" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z") }
{ "name" : "XiaoWang", "age" : 25, "skill" : { "skillOne" : "PhotoShop" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z") }
{ "name" : "LiangPeng", "age" : 28, "skill" : { "skillOne" : "HTML+CSS" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z") }
{ "name" : "HouFei", "age" : 25, "skill" : { "skillOne" : "HTML+CSS" }, "regeditTime" : ISODate("2019-03-27T08:08:06.470Z") }
{ "name" : "LiuYan", "age" : 35, "skill" : { "skillOne" : "PhotoShop" }, "regeditTime" : ISODate("2019-03-27T08:08:06.471Z") }
{ "name" : "DingLu", "age" : 20, "skill" : { "skillOne" : "PhotoShop" }, "regeditTime" : ISODate("2019-03-27T08:08:06.471Z") }
{ "name" : "JiaPeng", "age" : 29, "skill" : { "skillOne" : "HTML+CSS" }, "regeditTime" : ISODate("2019-03-27T08:08:06.471Z") }
{ "name" : "LiJia", "age" : 26, "skill" : { "skillOne" : "HTML+CSS" }, "regeditTime" : ISODate("2019-03-27T08:08:06.471Z") }
复制代码
// 查找公司小于35大于25的人
db.workmate.find({age: {$lt: 35, $gt: 25}},{name: 1, "skill.skillOne": 1, _id: 0, age: 1}
)
复制代码
运行结果
{ "name" : "xiaoying", "age" : 33, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "ShengLei", "age" : 31, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "LiangPeng", "age" : 28, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "JiaPeng", "age" : 29, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "LiJia", "age" : 26, "skill" : { "skillOne" : "HTML+CSS" } }
复制代码

不等修饰符

  • 小于($lt):英文全称less-than
  • 小于等于($lte):英文全称less-than-equal
  • 大于($gt):英文全称greater-than
  • 大于等于($gte):英文全称greater-than-equal
  • 不等于($ne):英文全称not-equal

第六节 查询:find的多条件查询

1、nin (不在某个范围)
// 查询同事中年龄是25岁和33岁的信息
db.workmate.find({age:{$nin:[25,33]}},{name:1,"skill.skillOne":1,age:1,_id:0}
)
复制代码
运行结果
{ "name" : "xiaoying", "age" : 33, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "XiaoWang", "age" : 25, "skill" : { "skillOne" : "PhotoShop" } }
{ "name" : "HouFei", "age" : 25, "skill" : { "skillOne" : "HTML+CSS" } }
复制代码
2、$or修饰符
// 条件或  查出两个条件满足其中一个即可
db.workmate.find({$or:[{age:{$gte:30}},{"skill.skillThree":'PHP'}
]},{name:1,"skill.skillThree":1,age:1,_id:0}
)
复制代码
运行结果
{ "name" : "xiaoying", "age" : 33, "skill" : { "skillThree" : "PHP" } }
{ "name" : "ShengLei", "age" : 31, "skill" : { "skillThree" : "PPT" } }
{ "name" : "LiuYan", "age" : 35, "skill" : {  } }
{ "name" : "JiaPeng", "age" : 29, "skill" : { "skillThree" : "PHP" } }
{ "name" : "LiJia", "age" : 26, "skill" : { "skillThree" : "PHP" } }
复制代码
3、$and修饰符
db.workmate.find({$and:[{age: {$gt: 30}},{"skill.skillThree": "PHP"}
]},{name: 1, 'skill.skillThree':1, age:1, _id: 0}
)
复制代码
运行结果
{ "name" : "xiaoying", "age" : 33, "skill" : { "skillThree" : "PHP" } }
复制代码
4、$not修饰符
db.workmate.find({age: {$not: {$lte: 30,$gte: 20}}
},
{name: 1, 'skill.skillOne':1, age: 1, _id: 0}
)
复制代码
运行结果
{ "name" : "xiaoying", "age" : 33, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "ShengLei", "age" : 31, "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "MinJie", "age" : 18, "skill" : { "skillOne" : "PhotoShop" } }
{ "name" : "LiuYan", "age" : 35, "skill" : { "skillOne" : "PhotoShop" } }
复制代码

今天先更新到这里吧~~~后边继续更新,每天进步一点点,希望对自己和看文章的你都能进步!

转载于:https://juejin.im/post/5c9b52b35188251c550be0cd

我的mongo学习之路相关推荐

  1. Redis学习之路(一)--下载安装redis

    redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...

  2. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  3. 前端Vue学习之路(一)-初识Vue

    Vue学习之路 (一) 1.引言 2.更换npm国内镜像源 3.用npm下载Vue 4.Vue全家桶 5.使用命令创建项目 5.推荐插件 6.推荐网站 7.学习扩展 1.引言 先安装node.js环境 ...

  4. 学习之路-现代密码学基础-001

    学习之路-现代密码学基础-第一章密码学概论 转载于:https://www.cnblogs.com/vegetables-Adanos/p/5371420.html

  5. 拿下斯坦福和剑桥双offer,00后的算法学习之路

    董文馨,00后,精通英语,西班牙语.斯坦福大学计算机系和剑桥大学双Offer,秋季将进入斯坦福大学学习. 10岁开始在国外上学:12岁学Scratch: 13岁学HTML & CSS: 14岁 ...

  6. Markdown学习之路

    Markdown学习之路 作者:CFishHome 转载请注明地址:https://blog.51cto.com/12731497/2164274 Markdown是什么? Markdown是一个 W ...

  7. [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇...

    本文是为后面的学习之路做铺垫,简单介绍下企业库中的Validation模块的一些相关知识,包括Validation模块的简介.用途.使用方法.默认提供的多种验证器的介绍等. 一.简介及用途 在实际的项 ...

  8. 转载: Qt 学习之路 2归档

    Qt 学习之路 2归档 http://www.devbean.net/2012/08/qt-study-road-2-catelog/

  9. python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...

    教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...

最新文章

  1. SAP MM服务类采购申请里的总账科目的修改
  2. android shape.xml 文件使用
  3. UITableViewHeader 动态调整高度
  4. python函数type的用意_python之type函数
  5. 关于Reporting Service中的Report builder的几个疑问,高手来解答下
  6. ASP.NET MVC 动态选择VIEW
  7. 太和二中计算机考试,安徽省太和二中高二数学下册期末考试试题精选
  8. jvm 分代回收算法通俗理解
  9. 计算机机房的维护管理论文,学校计算机机房维护与管理论文
  10. Python全栈开发之函数
  11. 沈阳初级计算机职称,沈阳职称申报(附网址)
  12. hadoop中遇到的问题
  13. JACKSON JSON 操作帮助类
  14. MySQL 8.0 新特性:哈希连接(Hash Join)
  15. sql字段合并mysql_sql合并字段
  16. fortran调用MKL函数库中的gemm的fortran95接口计算矩阵相乘
  17. 【转】ubuntu12.04完美安装QQ2012、QQMusic、Foxmail等--wine
  18. 5个值得收藏的视频下载网站
  19. 国外苹果id_爆料者称苹果仍在继续研发iPhone屏下Touch ID
  20. uniapp 如何打通消息推送-华为

热门文章

  1. Kernel Driver DmaEgine 子系统 (一)
  2. hellowolrd 的系统调用
  3. 鸿蒙os内测版应用名称,鸿蒙OS2.0发布,只有两款机型可以申请内测
  4. jwt需要存redis吗_Spring Cloud Security:Oauth2结合JWT使用
  5. 【FPGA】SRIO例子程序仿真分析实践
  6. FPGA的配置引脚以及配置过程
  7. 【 Notes 】Categories of Wireless Local Positioning Systems
  8. String构造方法和字符集编码转换
  9. 别瞎操心了!机器人根本不会抢你的饭碗
  10. SQL关键字转换大写核心算法实现