1. MongoDB简介

• MongoDB是为快速开发互联网Web应用而设计的数据库系统。
• MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分。
• MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON。(BSON)

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB是一个NoSQL的数据库,是一款文档型数据库(database);存储的数据的基本单位就是文档(document),所谓文档其实就是一个“JSON”  - MongoDB中的“JSON”我们称为BSON,比普通的JSON的功能要更加的强大。
数据库(database)
  集合(collection)
文档(document)
数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合
MongoDB数据库使用的是JavaScript进行操作的,在MongoDB含有一个对ES标准实现的引擎,在MongoDB中所有ES中的语法中都可以使用。

MongoDB优缺点

基础概念解析

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/域

index

index

索引

table joins

不支持

表连接,MongoDB不支持

primary key

primary key

主键,MongoDB自动将_id字段设置为主键

通过下图实例,我们也可以更直观的了解Mongo中的一些概念:

2. 安装

2.1 Windows的安装和使用:

官方文档     

mongod.cfg(D:\ProgramFiles\MongoDB\Server\3.2) 要放在与bin的同级目录

systemLog:
destination: file
path: D:\ProgramFiles\MongoDB\data\log\mongod.log
storage:
dbPath: D:\ProgramFiles\MongoDB\data\db

 搜索cmd 以管理员身份运行: 

sc.exe create MongoDB binPath= "\"D:\ProgramFiles\MongoDB\Server\3.2\bin\mongod.exe\" --service --config=\"D:\ProgramFiles\MongoDB\Server\3.2\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"

使服务自动启动

若不成功 sc delete MongoDB  然后重新来

2.2 在Linux中安装

通过WGET下载Linux版本的MongoDB

[kris@hadoop101 software]$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.3.tgz

将压缩包解压到指定目录

[kris@hadoop101 software]$ tar -zxvf mongodb-linux-x86_64-rhel62-3.4..tgz -C /opt/module/
//重命名
[kris@hadoop101 module]$ mv mongodb-linux-x86_64-rhel62-3.4./ mongodb

在安装目录下创建data文件夹用于存放数据和日志

[kris@hadoop101 mongodb]$ mkdir -p data/db
[kris@hadoop101 mongodb]$ mkdir data/logs/
[kris@hadoop101 logs]$ touch mongodb.log

在data文件夹下创建mongodb.conf配置文件

[kris@hadoop101 data]$ vim mongodb.conf
#端口号port =
#数据目录
dbpath = /opt/module/mongodb/data/db
#日志目录
logpath = /opt/module/mongodb/data/logs/mongodb.log
#设置后台运行
fork = true
#日志输出方式
logappend = true
#开启认证
#auth = true

完成MongoDB的安装后,启动MongoDB服务器:

// 启动MongoDB服务器   bin/mongod --dbpath 路径 --port 端口号
[kris@hadoop101 mongodb]$ bin/mongod -config /opt/module/mongodb/data/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process:
child process started successfully, parent exiting
// 访问MongoDB服务器
[kris@hadoop101 mongodb]$ bin/mongo
MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.
--13T09::44.816+ I CONTROL [initandlisten]

停止MongoDB服务器

[kris@hadoop101 mongodb]$ bin/mongod -shutdown -config data/mongodb.conf
killing process with pid:
数据库存储在data目录中。MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
> show dbs
admin .000GB
local .000GB
recommender .005GB
admin:从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。 > use recommender --该命令将创建一个新的数据库,如果存在,将返回现有的数据库。
switched to db recommender > db -- 显示当前使用的数据库
recommender > show collections -- 库下面所有的集合
AverageMovies
GenresTopMovies
Movie

集合就是 MongoDB 文档组,类似于MySQL中的table。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
MongoDB 中使用 createCollection() 方法来创建集合。
语法格式:
db.createCollection( name, options )
参数说明:

  •   name: 要创建的集合名称
  •   options: 可选参数, 指定有关内存大小及索引的选项

  options 可以是如下参数:

字段

类型

描述

capped

布尔

(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。

autoIndexId

布尔

(可选)如为 true,自动在 _id 字段创建索引。默认为 false。

size

数值

(可选)为固定集合指定一个最大值(以字节计)。
如果 capped  true,也需要指定该字段。

max

数值

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

> use test
switched to db test
> db
test
> db.createCollection("staff") //创建集合
{ "ok" : }
> db.createCollection("student")
{ "ok" : }
//① 插入单个对象; 也可自动创建集合,在MongoDB中,当你插入一些文档时,MongoDB会自动创建集合并插入文档。
> db.mycol.insert({"name":"alice","gender":"female","age":, "url":"www.baidu.com"}) //② 也可以将数据定义为一个变量,如下所示:
> document=({title: '名单',
   description: 'this is a mongodb',
   by: 'smith',
   url: 'http://www.google.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes:
   })
> db.stuff.insert(document) 插入文档你也可以使用 db.col.save(document) 命令。
如果不指定 _id 字段 save() 方法类似于 insert() 方法。
如果指定 _id 字段,则会更新该 _id 的数据。 //③插入数组
> db.staff.insert(
  [
    { name: "kk", age: , status: "A", },
    { name: "mm", age: , status: "A", },
    { name: "an", age: , status: "D", }
  ]
) //④ 3.2版本可使用insertOne 或 insertMany
向集合中插入一个文档
> db.staff.insertOne(
{
name: "sue",
age: ,
status: "P"
}
) 向集合中插入多个文档
> db.staff.insertMany(
[
{ name: "bob", age: , status: "A", },
{ name: "ahn", age: , status: "A", },
{ name: "xi", age: , status: "D", }
]
) //⑤ 一次插入多条数据
、先创建数组
、将数据放在数组中
、一次 insert 到集合中
var arr = [];
for(var i= ; i<= ; i++){
arr.push({num:i});
}
db.numbers.insert(arr); > show collections
staff
student > db.staff.find() //查看数据
{ "_id" : ObjectId("5db004f6a68cc860f4652fbb"), "name" : "kris", "age" : , "url" : "www.kris.com" }
ObjectId 类似唯一主键,可以很快的去生成和排序,包含 bytes,含义是:   
  前 个字节表示创建 unix 时间戳   
  接下来的 个字节是机器标识码   
  紧接的两个字节由进程 id 组成 PID   
  最后三个字节是随机数

文档是一组键值(key-value)对组成。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

一个简单的例子: {"name":"kris"}

  注意:

    1.文档中的键/值对是有序的。

    2.MongoDB区分类型和大小写。

    3.MongoDB的文档不能有重复的键。

    4.文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

删除集合
> db.mycol.drop() True

MongoDB 条件操作符

$gt -------- greater than  >
$gte --------- gt equal >=
$lt -------- less than <
$lte --------- lt equal <=
$ne ----------- not equal !=
$eq -------- equal =

修改

如果指定字段不存在$set操作符将会添加一个新的字段使用指定的值,前提是新字段不能违反类型规约,如果你使用点号指定一个不存在的内嵌文档字段将会添加一个新的内嵌字段;  如果指定多个字段值对,$set操作符将会新增或者更新每个字段;

> db.staff.update({'title':'名单'},{$set:{'title':'花名册'}}) //只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : })
> db.staff.update({'title':'名单'},{$set:{'title':'花名册'}}, {multi:true}) > db.staff.find().pretty() // 查看已修改成功; pretty()是美观的展示
> db.staff.update({"age" : { $gt : } }, {$set : {"name": "heihei"}}); //默认只修改第一条,加true,false也是修改第一条
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : }) > db.staff.update({"age" : { $gt : } }, {$set : {"status": "a"}}, false,true); //全部更新; 两个true,true也是全部更新
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : }) > db.staff.update({"name" : { $eq : "bob"} }, {$inc : {"age": }}, false,false); //只更新第一条记录, 若改为true,true即全部更新
WriteResult({ "nMatched" : , "nUpserted" : , "nModified" : }) - db.collection.updateOne() - 修改集合中的一个文档
- db.collection.updateMany() - 修改集合中的多个文档
- db.collection.replaceOne() - 替换集合中的一个文档

- 查询数据库中的文档
- db.collection.find()
- 可以根据指定条件从集合中查询所有符合条件的文档
- 返回的是一个数组
- db.collection.findOne()
- 查询第一个符合条件的文档
- 返回的是一个对象
- db.collection.find().count()
- 查询符合条件的文档的数量 - 删除集合中的文档
- db.collection.remove()
- 删除集合中的一个或多个文档(默认删除多个)
- db.collection.deleteOne()
- 删除集合中的一个文档
- db.collection.deleteMany()
- 删除集合中的多个文档
- 清空一个集合
db.collection.remove({})
- 删除一个集合
db.collection.drop()
- 删除一个数据库
db.dropDatabase()

Mondb的更多相关文章

  1. mondb 常用命令学习记录

    mondb 常用命令学习记录 一.MongoDB 下载安装 MongoDB官网 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制 ...

  2. monodb C#接口封装

    mongodb的C#封装,驱动是samus/mongodb-csharp 1.连接类 using MongoDB; using MongoDB.Linq; namespace DBModel { pu ...

  3. Mongodb 安装 以及 问题解决-摘自网络

    一,下载 1.官网为:http://www.mongodb.org/ :下载安装程序的地址为:http://www.mongodb.org/downloads ,选择选择的是Windows 32-bi ...

  4. 5.非关系数据库(Nosql)它mongodb:创建一个集合,导出和导入备份, 数据恢复,进出口

     1 固定集合 固定集合值得是事先创建并且大小固定的集合 2 固定集合的特征:固定集合非常像环形队列.假设空间不足,最早文档就会被删除,为新的文档腾出空间.一般来说.固定集合适用于不论什么想要自己 ...

  5. 使用SpringBoot开发REST服务

    本文介绍如何基于Spring Boot搭建一个简易的REST服务框架,以及如何通过自定义注解实现Rest服务鉴权 搭建框架 pom.xml 首先,引入相关依赖,数据库使用mongodb,同时使用red ...

  6. monog和github学习

    1.导出服务器数据库到本地以json的格式储存:mongoexport -h ip -d dbname -c user -o D:\mondb\user.json2.导入本地Json到本地项目中:D: ...

  7. wamp 环境安装php_mongo 或 mongodb的扩展

    特别注意:momgo 与mondb 是两个不同的扩展,不是同一个,这是一个坑 1.查看你的php版本,Compiler,Thread safety版本 2.下载地址 https://pecl.php. ...

  8. NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署

    NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MongoDB 是一个基于分布式文件存储的数据库.由 C ...

  9. 副本集mongodb 无缘无故 cpu异常

    mondb 服务器故障 主从复制集 主:   192.168.1.106从:   192.168.1.100仲裁:192.168.1.102 os版本:CentOS Linux release 7.3 ...

随机推荐

  1. (day58)十、Cookie、Session、Token、Django中间件

    目录 一.Cookie (一)由来 (二)什么是Cookie (三)Django中操作Cookie (1)设置Cookie (2)获取Cookie (3)删除Cookie 二.Session (一)由 ...

  2. String的源码理解(未写完)

    String本质上是一个char数组(jdk 9之后是byte数组),并且是一个声明为final的数组,并且String的不可变也是通过这种把数组声明为final来实现的 public final c ...

  3. A bean with that name has already been defined in class path resource [org/springframework/transaction/annotation/ProxyTransactionManagementConfiguration.class] and overriding is disabled

    2019-12-19 13:26:17.594 WARN [main] o.s.boot.web.servlet.context.AnnotationConfigServletWebServerApp ...

  4. Repair Microsoft.VisualStudio.MinShell.Msi.Resources 2203 error And visual studio 2019 key

    1. Go to the properties of "My computer" 2. Go to advanced settings of the system 3. Go to ...

  5. Noip2017Day2T2 宝藏

    题目链接 problem 有\(n\)个点,\(m\)条无向边,选择一个点开始开辟道路.开辟一条长度为\(L\)的链接\(u,v\)的道路会花费\(L \times K\),K表示从选择的最初点到\( ...

  6. 【计算机网络】如何让Ajax通信过程携带Cookie呢?

    Ajax 1. 介绍一下ajax并代码实现 1.1 基本概念 JavaScript 和XML(Asynchronous JavaScript And XML).简单点说,就是使用 XMLHttpReq ...

  7. jQuery 源码分析(十六) 事件系统模块 底层方法 详解

    jQuery事件系统并没有将事件监听函数直接绑定到DOM元素上,而是基于数据缓存模块来管理监听函数的,事件模块代码有点多,我把它分为了三个部分:分底层方法.实例方法和便捷方法.ready事件来讲,好理 ...

  8. PHP echo一个对象报语法错误,为什么?

    为什么直接echo一个对象就会报语法错误,而如果这个对象实现了__toString方法后就可以直接输出呢? 原因是echo本来可以打印一个对象,而且也实现了这个接口,但是PHP对其做了个限制,只有实现 ...

  9. Web前端——表单提交和Js添加选项

    表单 表单提交 表单提交之后会将表单的数据以get或post方式,传送到action要打开的页面 方式1: 使用提交按钮 <form action="" method=&qu ...

  10. 表达式树练习实践:C#判断语句

    目录 表达式树练习实践:C#判断语句 if if...else switch ?? 和 ?: 表达式树练习实践:C#判断语句 判断语句 C# 提供了以下类型的判断语句: 语句 描述 if 一个 if ...