一、安装

  我使用的系统是Ubuntu16.04,不同版本系统参照官网安装步骤。安装官网4个步骤安装好MongoDB并启动。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
//不同版本 选择不同命令执行
--Ubuntu 12.04
echo "deb http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list --Ubuntu 14.04
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list --Ubuntu 16.04
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

sudo apt-get update && apt-get install -y mongodb-org
sudo service mongod start

安装MongoDB可视化工具compass(可视化管理工具比较多,可以看这篇文章介绍)。我的可视化工具是安装在Window上,MongoDB安装在Ubuntu上,现在来远程连接。因为都是使用默认配置没有设置连接用户名和密码,所以选择None。

点击连接,会发现报错提示。需要修改配置文件,打开 /etc/mongod.conf,修改bindIP为:0.0.0.0,并重启服务。当然如果安装的是Window版本的MongoDB和Compass在同一台机器上,可以直接连接不会有报错提示。这里说一个题外话,关于127.0.0.1和0.0.0.0的区别:如上面当配置文件的绑定Ip为127.0.0.1时,那只能本地连接。修改为0.0.0.0则表示一个无效、未知、不可用的目标。在服务器中,0.0.0.0指本机上所有的IPV4地址。

二、基础概念

  MongoDB中有几个基本概念:文档、集合、数据库,分别对应关系数据库中的数据行、数据表、数据库。MongoDB中也有索引的概念和关系型数据库概念相同。由于MongoDB数据库是介于关系型数据库和非关系行数据库之间,所以不支持表关联。在数据表中自动将_id字段设置为主键。

三、数据库语句

  首先进入mongodb环境。

root@VM---ubuntu:~# mongo

3.1 创建数据库

> use User //创建User数据库 Use命令:如果数据库不存在,则创建数据库,否则切换到指定数据库。
switched to db User

  数据库名区分大小写,最多为64字节。要记住一点,数据库最终会变成文件系统中的文件,而数据库名就是相应的文件名,这是数据库名有如此多限制的原因。

3.2 创建集合

> db.createCollection("UserInfo")//创建一个UserInfo的集合 相当于数据表
{ "ok" : }

  db.createCollection(name, options)

参数说明:

  • name:要创建的集合名称
  • options:可选参数, 指定有关内存大小及索引的选项
字段 类型 描述
capped 布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size 数值 (可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。

max 数值 可选)指定固定集合中包含文档的最大数量。

3.3 插入数据

> user={"Name":"Microheart","Age":}
{ "Name" : "Microheart", "Age" : }
> db.UserInfo.insert(user)
WriteResult({ "nInserted" : })

与之相同的还有批量插入insertMany()

> db.UserInfo.insertMany([{"Name":"Name1","Age":},{"Name":"Name2","Age":}])
//返回插入的id
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5b88cecf8320a5dc443845bb"),
ObjectId("5b88cecf8320a5dc443845bc")
]
}

在执行批量插入的过程中有一个文档插入失败,那么在这个文档之前的所有文档都会成功插入集合,而这个文档以及之后的所有文档全部插入失败。插入数据时,MongoDB对数据进行最基本的检查:检查文档的基本机构,如果没有"_id”字段,就会自动增加一个。

3.4 查找数据

> db.UserInfo.find()
{ "_id" : ObjectId("5b8797397cc91f7ea2f167c8"), "Name" : "Microheart", "Age" : }

find()后面还可以跟Limit()和Skip()。如:

db.UserInfo.find().Limit(2).Skip(3) //跳过前3个,查找后面两个。

3.5 更新数据

> db.UserInfo.find()
{ "_id" : ObjectId("5b8797397cc91f7ea2f167c8"), "Name" : "Microheart", "Age" : }
{ "_id" : ObjectId("5b8798ac7cc91f7ea2f167c9"), "Name" : "张三", "Age" : }
> db.UserInfo.update({"Name":"Microheart"},{$set:{"Age":}})//将Name为Microheart的文档的Age更新为24
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : })//返回匹配的文档的个数为1,修改个数为1

 > db.UserInfo.find()
 { "_id" : ObjectId("5b8797397cc91f7ea2f167c8"), "Name" : "Microheart", "Age" : 24 }//Age的值已经更新
 { "_id" : ObjectId("5b8798ac7cc91f7ea2f167c9"), "Name" : "张三", "Age" : 20 }

上面对文档部分更新,所以使用了修改器,如果对整个文档进行修改,可以使用文档替换。

“$set”修改器用来指定一个字段的值。如果这个字段不存在,则创建它。

“$inc”修改器用来增加已有键(键的类型只能是整数、长整型、双精度浮点型)的值,或者该键不存在那就创建一个。

> db.UserInfo.find()
{ "_id" : ObjectId("5b8797397cc91f7ea2f167c8"), "Name" : "Microheart", "Age" : }
{ "_id" : ObjectId("5b880944c358f71ebd76fd2b"), "Name" : "Microheart", "Age" : }
{ "_id" : ObjectId("5b88cecf8320a5dc443845bb"), "Name" : "Name1", "Age" : }
{ "_id" : ObjectId("5b88ceee8320a5dc443845be"), "Name" : "Name2" }
> db.UserInfo.update({"Name":"Name1"},{"$inc":{"Age":}})//让Age字段增加1
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : })
> db.UserInfo.find({"Name":"Name1"})
{ "_id" : ObjectId("5b88cecf8320a5dc443845bb"), "Name" : "Name1", "Age" : }

3.6 删除

> db.UserInfo.remove({"Name":"张三"})
WriteResult({ "nRemoved" : })

删除数据是永久性的,不能撤销,也不能恢复。

如果想知道一个函数的其他参数的含义,直接输入函数名(函数名后不要输入小括号),可以看到其js代码。

3.7 排序

> db.UserInfo.find().sort({Age:})//按照Age升序 如果为-1 表示降序
{ "_id" : ObjectId("5b88054098a1f002f4e8beb6"), "Name" : "abc", "Age" : }
{ "_id" : ObjectId("5b8797397cc91f7ea2f167c8"), "Name" : "Microheart", "Age" : }

四、数据类型

  MongoDB支持的数据类型有:null、布尔型、数值、字符串、日期、正则表达式、数组、内嵌文档、对象id等。

4.1 日期

  日期被存储为自1970年1月1日0点以来的毫秒数,不存时区。

4.2 内嵌文档

  举例说明:person中内嵌的address为一个文档

{
"person": {
"name": "Microheart",
"age": ,
"address": {
"country": "China",
"province": "ZheJiang",
"city": "HangZhou"
}
}
}

4.3 id

  MongoDB中存储的文档必须有一个“_id”键,确保集合里每个文档都能被唯一标识,每个集合中不能有相同的_Id值出现。这个键的值可以是任何类型的,默认为ObjectId对象。

  由于MongoDB设计的初衷就是分布式数据库,所以没有采用想SQL Server和MySql那样能自增的主键,因为这样费时费力,所以保证多个主机生成不同值很重要。ObjectId的12字节按照如下方式生成:

  • 前4个字节表示时间戳
  • 接下来的3个字节是机器标识码
  • 紧接的两个字节由进程id组成(PID)
  • 最后三个字节是随机数。

初识MongoBD的更多相关文章

  1. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  2. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  3. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  4. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  5. UI篇(初识君面)

    我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...

  6. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  7. 初识SpringMvc

    初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...

  8. 初识redis数据类型

    初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...

  9. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

随机推荐

  1. Python开发——8.模块

    一.模块 1.模块 (1)定义:一个.py文件就是一个模块 (2)原因:为了防止程序代码越来越长,对函数进行分组放到不同的文件夹里. (3)优点:提高代码的可维护性:模块编写完毕可以被别人引用,也可以 ...

  2. javascript小括号、中括号、大括号学习总结

    作为一名编程人员,和括号打交道是必不可少的.你可知道在不同的上下文中,括号的作用是不一样的,今天就让我们简单总结下javascript小括号.中括号.大括号的用法. 总的来说,JavaScript中小 ...

  3. JSF初学之概念篇1

    先转一篇介绍JSF的文章: Javaserver Faces 简介 — 什么是 JSF? 作者:Chris Schalk,Oracle Corporation2005 年 4 月 什么是 JSF? J ...

  4. 逆向暴力求解 538.D Weird Chess

    11.12.2018 逆向暴力求解 538.D Weird Chess New Point: 没有读好题 越界的情况无法判断,所以输出任何一种就可以 所以他给你的样例输出完全是误导 输出还搞错了~ 输 ...

  5. day19_雷神_django第二天

    django_day02 Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 1.URLconf配置 基本 ...

  6. Java中不定项参数(可变参数)的作用和使用方式

    引言: 我们在编写方法的过程中,可能会遇见一个方法有不确定参数个数的情况.一般我们会用方法重载来解决问题: //方法重载,解决参数个数不确定问题 public void method(); publi ...

  7. Mac再建管理员帐户

    在Mac上添加用户没有成功, 把原来的管理员的用户群组修改后, 账户类型成为普通用户. 百度如何重新添加管理员: Mac上修改用户名后,无法用管理员账号和密码登录. 按照超过方法下去, 出现问题: 1 ...

  8. 手动模拟attach cinder volume的过程

    我们首先启动一台机器,启动的时候attach一个volume 创建一个空的cinder volume root:~# cinder create --display-name emptyvolume1 ...

  9. 移动APP外挂攻防实战

    前言 近日,某某龙在2018年的一次会议上发表了一个演讲,4000多人聚集在现场玩“跳一跳”游戏.随着他们指尖的翻飞跳跃,大屏幕上的现场排名也在不断刷新……而在全场的惊叹声中,最高分出现了,967分! ...

  10. JavaScript中常见的10个BUG及其修复方法

    如今网站几乎100%使用JavaScript.JavaScript看上去是一门十分简单的语言,然而事实并不如此.它有很多容易被弄错的细节,一不注意就导致BUG. 1. 错误的对this进行引用 在闭包 ...