Mondb
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,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 |
|
autoIndexId |
布尔 |
(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
|
size |
数值 |
(可选)为固定集合指定一个最大值(以字节计)。 |
|
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的更多相关文章
- mondb 常用命令学习记录
mondb 常用命令学习记录 一.MongoDB 下载安装 MongoDB官网 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制 ...
- monodb C#接口封装
mongodb的C#封装,驱动是samus/mongodb-csharp 1.连接类 using MongoDB; using MongoDB.Linq; namespace DBModel { pu ...
- Mongodb 安装 以及 问题解决-摘自网络
一,下载 1.官网为:http://www.mongodb.org/ :下载安装程序的地址为:http://www.mongodb.org/downloads ,选择选择的是Windows 32-bi ...
- 5.非关系数据库(Nosql)它mongodb:创建一个集合,导出和导入备份, 数据恢复,进出口
1 固定集合 固定集合值得是事先创建并且大小固定的集合 2 固定集合的特征:固定集合非常像环形队列.假设空间不足,最早文档就会被删除,为新的文档腾出空间.一般来说.固定集合适用于不论什么想要自己 ...
- 使用SpringBoot开发REST服务
本文介绍如何基于Spring Boot搭建一个简易的REST服务框架,以及如何通过自定义注解实现Rest服务鉴权 搭建框架 pom.xml 首先,引入相关依赖,数据库使用mongodb,同时使用red ...
- monog和github学习
1.导出服务器数据库到本地以json的格式储存:mongoexport -h ip -d dbname -c user -o D:\mondb\user.json2.导入本地Json到本地项目中:D: ...
- wamp 环境安装php_mongo 或 mongodb的扩展
特别注意:momgo 与mondb 是两个不同的扩展,不是同一个,这是一个坑 1.查看你的php版本,Compiler,Thread safety版本 2.下载地址 https://pecl.php. ...
- NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署
NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MongoDB 是一个基于分布式文件存储的数据库.由 C ...
- 副本集mongodb 无缘无故 cpu异常
mondb 服务器故障 主从复制集 主: 192.168.1.106从: 192.168.1.100仲裁:192.168.1.102 os版本:CentOS Linux release 7.3 ...
随机推荐
- Educational Codeforces Round 76 (Rated for Div. 2) B. Magic Stick 水题
B. Magic Stick Recently Petya walked in the forest and found a magic stick. Since Petya really likes ...
- 安装Goland开发工具
安装Goland开发工具 开发工具: 文本类的编辑器:记事本,notepad,sublime text,atom... 通过命令执行程序 IED:集成开发环境(integrated develop ...
- go-gtk环境配置
go-gtk环境配置(用于go的图形化界面) 弄了一天,终于把这个环境给搭建好了,差不多就是安装msys2->安装gtk的各个版本->安装mingw(我原来装有但不影响,因为重复了,环境变 ...
- SpringBoot 教程之属性加载详解
免费Java高级资料需要自己领取,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G. ...
- spring web mvc环境搭建
这两天在学习spring,哎,没办法呀,成都基本都是java,不喜欢学这个也没有用.多学点多条路.还得生活不是. 好了,言归正传,我这里记录下我搭建spring mvc的过程,其实过程不算太难,主要是 ...
- java主函数
相信很多初次接触java的同学,在遇见主函数的时候,听到最多的就是主函数的格式是固定的,不能进行修改等等.这就让人疑惑了,主函数为啥就那么特殊呢?接下来博主会为大家解释主函数.大家先看看下面这个程序: ...
- 为什么要学 Python? python该怎么学
很多童鞋对为什么学习Python感到迷茫,小编来跟大家说说学习Python的10个理由,希望可以帮助到大家!!! 摘要: 看完这十个理由,我决定买本python从入门到精通! 如果你定期关注现今的科技 ...
- TCP协议的三次握手与四次挥手
1.数据包说明 1)源端口号(16位):它(连同源主机IP地址)标识源主机的一个应用进程. 2)目标端口号(16位):它(连同源主机IP地址)标识目的主机的一个应用进程.这两个值加上IP报头中的源主机 ...
- 多线程学习三:Thread API,ThreadLocal,synchronized,volatile和Condition
一.Thread API: setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 首先要了解什么是Thread. ...
- 爬取动态html网页,requests+execjs
请求地址:https://g.hongshu.com/content/99269/15382723.html 网页内容为动态执行js所得 1.直接浏览器模拟 不用考虑页面的业务逻辑什么的,直接得到结果 ...