Docker下,极速体验mongodb

MongoDB是基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案。

下载镜像

在Docker环境下很容易搭建一个mongodb单机版server,先执行docker pull mongo:3.2命令下载官方镜像;

运行mongodb

下载成功后,执行以下命令即可创建一个mongodb容器:

docker run --name mongodbstandalone -idt mongo:3.2

进入控制台

执行以下命令进入容器mongodbstandalone:

docker exec -it mongodbstandalone /bin/bash

再执行mongo即可进入命令行控制台,如下图:

基本操作

可以直接在控制台做四则运算,如下图:

以下是几个基本的命令: 1. show dbs :列出所有数据库; 2. db:显示当前使用的数据库; 3. use test:使用test数据库;

效果如下图:

相对概念

用惯了mysql再来用mongo,有些概念还是有点不习惯的,在此列出来对比一下:

mysql

mongo

备注

database

database

数据库

table

collection

表/集合

row

document

行/文档

column

field

字段

接下来我们把增删改查都实践一遍:

新增

执行命令use school即可切换到school数据库(不存在就创建),如下所示:

> use school
switched to db school
> db
school
> show dbs
local  0.000GB
>

执行命令db.student.insert({name:”Tom”, age:16})会在集合student中创建一个文档(集合不存在就创建),再执行db.student.find()可以查询student表的所有记录,如下所示:

> db.student.insert({name:"Tom", age:16})
WriteResult({ "nInserted" : 1 })
> db.student.insert({name:"Jerry", age:15})
WriteResult({ "nInserted" : 1 })
> db.student.insert({name:"Mary", age:9})
WriteResult({ "nInserted" : 1 })
> db.student.find()
{ "_id" : ObjectId("59d82f9fece586325c4917c3"), "name" : "Tom", "age" : 16 }
{ "_id" : ObjectId("59d8305aece586325c4917c4"), "name" : "Jerry", "age" : 15 }
{ "_id" : ObjectId("59d83066ece586325c4917c5"), "name" : "Mary", "age" : 9 }

以上操作中一共新增了三个文档;

修改

执行命令db.student.update({‘name’:’Jerry’},{$set:{‘age’:11}})可以修改name为‘Jerry’的文档,将age改为11,如下所示:

> db.student.update({'name':'Jerry'},{$set:{'age':11}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.student.find()
{ "_id" : ObjectId("59d82f9fece586325c4917c3"), "name" : "Tom", "age" : 16 }
{ "_id" : ObjectId("59d8305aece586325c4917c4"), "name" : "Jerry", "age" : 11 }
{ "_id" : ObjectId("59d83066ece586325c4917c5"), "name" : "Mary", "age" : 9 }

注意update方法的入参,第一个大括号{‘name’:’Jerry’}表示查询条件,第二个大括号{$set:{‘age’:11}}表示更新的内容;

查找

执行命令db.student.find({‘age’:{$lte:11}})可以查找所有age小于等于11的文档:

> db.student.find({'age':{$lte:11}})
{ "_id" : ObjectId("59d8305aece586325c4917c4"), "name" : "Jerry", "age" : 11 }
{ "_id" : ObjectId("59d83066ece586325c4917c5"), "name" : "Mary", "age" : 9 }

{‘age’:{$lte:11}}是查询条件, $lte是小于等于的意思,以下是几个比较符号: 1. $lt:小于,less than; 2. $lte:小于等于,less than equal; 3. $gt:大于,greater than; 4. $gte:大于等于,greater than equal; 5. $ne:不等于,not equal;

还有limit(N)表示返回指定文档数:

> db.student.find({'age':{$lte:11}}).limit(1)
{ "_id" : ObjectId("59d8305aece586325c4917c4"), "name" : "Jerry", "age" : 11 }

skip(N)方法表示跳过前面N条文档:

> db.student.find({'age':{$lte:11}}).skip(1)
{ "_id" : ObjectId("59d83066ece586325c4917c5"), "name" : "Mary", "age" : 9 }

AND条件: 直接在查询的大括号中增加条件就是AND查询,如下所示:

> db.student.find({'age':{$lte:11}, 'name':'Mary'})
{ "_id" : ObjectId("59d83066ece586325c4917c5"), "name" : "Mary", "age" : 9 }

OR条件: OR查询要用到{$or:[]},中括号中填入多个查询条件,如下所示:

> db.student.find({$or:[{'name':'Mary'}, {'name':'Tom'}]})
{ "_id" : ObjectId("59d82f9fece586325c4917c3"), "name" : "Tom", "age" : 16 }
{ "_id" : ObjectId("59d83066ece586325c4917c5"), "name" : "Mary", "age" : 9 }

排序: 排序的时候用到sort({key:X})方法,key表示用来排序的字端,X等于1时表示升序,X等于-1时表示降序,如下所示:

> db.student.find({$or:[{'name':'Mary'}, {'name':'Tom'}]}).sort({age:1})
{ "_id" : ObjectId("59d83066ece586325c4917c5"), "name" : "Mary", "age" : 9 }
{ "_id" : ObjectId("59d82f9fece586325c4917c3"), "name" : "Tom", "age" : 16 }
> db.student.find({$or:[{'name':'Mary'}, {'name':'Tom'}]}).sort({age:-1})
{ "_id" : ObjectId("59d82f9fece586325c4917c3"), "name" : "Tom", "age" : 16 }
{ "_id" : ObjectId("59d83066ece586325c4917c5"), "name" : "Mary", "age" : 9 }

以上就是Docker下快速体验mongodb的所有操作,希望能对刚入门的读者建立一个初步的印象;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏柠檬先生

Angularjs基础(六)

AngularJS HTML DOM     AngularJS为HTML DOM 元素的属性提供了绑定应用数据的指令。 ng-disabled指令    ...

2008
来自专栏柠檬先生

sass 基础——回顾

1.webstorm 自动编译SASS   下载安装包 http://rubyinstaller.org/downloads/   然后点击安装,路径为默认路...

2177
来自专栏我的小碗汤

一个神秘现象引发对beego框架的思考

小强最近在项目中遇到了一个很奇怪的问题:在整改日志规范时,为了避免影响现有的代码结构以及改动尽可能小的前提下,在调用记日志的SDK处将某一个字段值首字母改为大写...

714
来自专栏zhangdd.com

ceph性能测试

该工具的语法为:rados bench -p <pool_name> <seconds> <write|seq|rand> -b <block size> -t...

1732
来自专栏余生开发

base64图片转码

方法一: new fileReader().readAsDataURL(file) 方法二: var imgCanvas=document.createE...

3363
来自专栏梦魇小栈

面试分享:2018阿里巴巴前端面试总结(题目+答案)

最开始的思路是用定时器实现,最后没有想的太完整,面试官给出的答案是用requestAnimationFrame。

972
来自专栏黒之染开发日记

【easeljs】事件汇总

文章说明:为了方便我自己查找easeljs的所有事件,所以我从easeljs的文档里抄过来加上自己的翻译,会慢慢补全,漏了的,错了的,评论一下我会补上去哦。(不...

992
来自专栏雨过天晴

原 荐 PHP 在 Console 模式下的

1641
来自专栏软件开发

前端MVC Vue2学习总结(二)——Vue的实例、生命周期与Vue脚手架(vue-cli)

一、Vue的实例 1.1、创建一个 Vue 的实例 每个 Vue 应用都是通过 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue...

4827
来自专栏finleyMa

补充上一篇 实现基于最新chrome的动态按需加载组件

上面代码中,import函数的参数specifier,指定所要加载的模块的位置。import命令能够接受什么参数,import()函数就能接受什么参数,两者区别...

1055

扫码关注云+社区