当前位置: 首页 > news >正文

走向全栈之MongoDB的使用

初识MongoDB

c0c3b6db012407c33c079ef5f2f1fa6b.jpg

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

为什么选择MongoDB

网上搜索的结果说mongodb插入效率比mysql高云云的。。
不过主要应该是因为json的缘故,为什么json呢,因为围绕json有很多可用的开源产品,比如elasticsearch

不过依我看,最主要的原因就是其对JavaScript良好的支持吧

安装MongoDB

官方下载地址

我们也可以利用homebrew和docker等第三方工具来进行MongoDB的安装

可视化工具

在这里我推荐Robomongo
没有原因,就是用着还挺顺手 -。-

启动MongoDB

打开终端,执行sudo mongod --config /usr/local/etc/mongod.conf启动MongoDB,再另开一个终端输入mongo就能成功打开mongo shell并进行咱们的操作了

界面如下

QQ20170306-095751@2x.png

如果需要退出MongoDB,按下control+c即可
注意:以上均在mac环境下成功实现,win 下本人还未尝试..下次找个机会试试

终于到了MongoDB操作时间

请开始我们的表演

插入数据

先利用use trevor-mongo创建一个名为trevor-mongo的数据库
QQ20170306-191659@2x.png

可以看到已经自动切换至trevor-mongo这个数据库,现在就可以利用db.test.insertOne({title: "第一条数据"})来插入一条数据

如果在数据库中没有数据表,MongoDB则会自动给你创建数据表
QQ20170306-192735@2x.png

就这样,恭喜你,已经在test数据表里面添加了第一条数据

查询数据

在上面我们已经添加了一条数据,那么现在可以在终端里面输入db.test.find({})来查询test数据表下的所有数据
QQ20170306-193727@2x.png

大伙有没有觉得_id很烦人??
其实我们完全可以将它过滤掉
QQ20170306-194111@2x.png

db.test.find({}, {_id: 0, title: 1})这条命令里面,第一个大括号里面应该写入筛选条件,如果为空,则默认为all。第二个大括号则是用来放数据显示条件,0代表不现实,1代表显示

修改(更新)数据

我们可以利用db.test.updateOne({},{$set: {des: "no.1"}})来为数据添加一个des字段,再查寻一下
QQ20170306-200002@2x.png

bingo!更新成功

删除数据

利用db.test.deleteOne({title: "第一条数据"}),我们可以删除从开头起第一个title"第一条数据"的文档

就这样,我们已经将最简单的操作给过了一遍,是不是很简单?所以说MongoDB对初学者真的很友好

进阶

在这之前,推荐先去看看MongoDB基本命令

现在,我们可以利用豆瓣开发者api来模拟一些数据

首先咱们先GET一下豆瓣电影top250的数据
QQ20170306-191138@2x.png

subjects里面的数据复制并打开编辑器,输入
QQ20170306-202430@2x.png

将这些代码粘贴至mongo shell并执行,这样就在数据库下成功创建了一个名为movies的数据表。

这时我们可以利用Robomongo来查看数据
首先是连接数据库,MongoDB默认端口号为27017
QQ20170306-202949@2x.png

现在开始有目的性的查询数据

假设咱们有个需求,需要获得评分9.2以上的所有电影,并且只需显示电影名(title),电影评分(rating.average)以及电影年份(year)并将它们升序排列输出

这说白了就是一个条件查询
代码如下:

db.movies.find({"rating.average": {$gt: 9.2}}, {title: 1, year: 1, "rating.average": 1, _id: 0}).sort({"rating.average": 1})

QQ20170306-204437@2x.png

就这样成功完成查询,是不是很简单?

就这样,祝大家 have a nice day ; )

相关文章:

  • RN开发之如何升级自己的本地RN项目
  • Android 倒计时的五种实现方式
  • Linux运维工程师如何找一份好工作?
  • 编码小结2
  • Nginx | 负载均衡(一)
  • VS链接错误: LNIK1123
  • Angular 2 DI - IoC DI - 1
  • 百度地图API标注+时间轴组件
  • Hinton神经网络公开课2 The Perceptron learning procedure
  • vs2017常用扩展
  • Hibernate MySQL Timestamp查询时遇到的转换问题
  • IOS开发-KVC
  • 关于FPS游戏痕的问题
  • ajax技术
  • Vue.js学习系列(二十五)-- 循环语句(一)
  • 分享一款快速APP功能测试工具
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • AngularJS指令开发(1)——参数详解
  • exports和module.exports
  • gcc介绍及安装
  • Github访问慢解决办法
  • go语言学习初探(一)
  • HTML-表单
  • Java 网络编程(2):UDP 的使用
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Kibana配置logstash,报表一体化
  • MySQL的数据类型
  • Node 版本管理
  • PHP CLI应用的调试原理
  • V4L2视频输入框架概述
  • vue-router的history模式发布配置
  • - 概述 - 《设计模式(极简c++版)》
  • 坑!为什么View.startAnimation不起作用?
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端设计模式
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 用jQuery怎么做到前后端分离
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • #Z0458. 树的中心2
  • #微信小程序:微信小程序常见的配置传旨
  • (1)(1.11) SiK Radio v2(一)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (zhuan) 一些RL的文献(及笔记)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十三)Maven插件解析运行机制
  • (十一)c52学习之旅-动态数码管
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)德国人的记事本
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料