MongoDB
一、下载与安装
https://www.mongodb.com/try/download
1.安装:
安装失败,那就换一种方式安装,重新下载zip包,然后解压,解压后创建data,logs两个目录。
data:保存数据库文件
logs:保存日志文件
2.新建mongo.conf文件
设置如下配置:
# 数据库文件路径
dbpath=D:\mongodb\data
# 日志文件
logpath=D:\mongodb\logs\mongo.log
# 日志采用追加模式,配置后mongodb日志会追加到现有的日志文件,不会重新创建一个新文件
logappend=true
# 启用日志文件,默认启用
journal=true
# 这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为 false
quiet=true
# 端口号 默认为 27017
port=27017
3.启动mongodb
在bin目录下,使用cmd中输入如下命令:
mongod --config D:\mongodb\mongo.conf
光标闪动,接着data和logs生成如下文件。
4.验证
在浏览器输入如下地址:
http://localhost:27017/
5.连接
在bin文件夹内新开一个命令窗口输入:mongo
以上就下载完,并安装启动,但是启动是一次性的,可以注册为windows的系统服务。
具体可参考:https://blog.csdn.net/bbc2005/article/details/87900841
6.配置环境变量
上述启动只能在bin目录下才能使用,配置环境变量可以在其他地方使用,将mongodb的bin路径配置到path下。
二、安装mongodb的客户端工具
下载:https://robomongo.org/download
解压:
双击运行:
创建连接:
三、快速入门
1.简介
MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有:
- 面向集合存储,易于存储对象类型的数据
- 模式自由
- 支持动态查询
- 支持完全索引,包含内部对象
- 支持复制和故障恢复
- 使用高效的二进制数据存储,包括大型对象
- 文件存储格式为BSON(一种JSON的扩展)
2.Mongodb与关系型数据库的对比
- 文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多)。
- 集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表。
- MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限。
- MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大。
- 每一个文档都有一个特殊的键”_id”,它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键。
3.mongodb的数据类型
四、mongodb的命令操作
4.1 数据库的操作
1、创建数据库
use 数据库名 //如果数据库不存在,则创建数据库,否则切换到指定数据库。
2、显示所有数据库
show dbs
注意:
- 使用use创建数据库后,再使用show dbs没有显示刚刚创建的数据库,需要向数据库中插入一条数据,才会显示。
- mongodb默认使用的数据库为test,如果不指定数据库,则默认使用test。
- mongodb的集合创建,只有在插入一条文档数据之后,才会创建。
3、删除数据库
db.dropDatabase() //删除数据库需要将数据库切换到当前数据库,并执行此命令
4.2 集合的操作
1、创建集合
db.createCollection(name, options)
-
name: 要创建的集合名称
-
options: 【可选参数】, 指定有关内存大小及索引的选项
在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
-- 不带options参数创建集合,例子:
use test //切换到test数据库
db.createCollection("myCollect") //创建一个名称为myCollect的集合
show collections 或者 show tables //显示所有集合
-- 带options参数创建集合,例子:
创建固定集合 mycol,整个集合空间大小 6142800 B, 文档最大个数为 10000 个。
db.createCollection("mycol", {capped:true, autoIndexId:true, size:6142800, max:10000})
上述是手动创建一个空的集合,也可以在创建集合的同时插入文档数据。
db.mycol2.insert({"name" : "菜鸟教程"})
2、删除集合
db.集合名称.drop() 如:db.mycol2.drop()
4.3 文档的操作
文档的数据结构和 JSON 基本一样。
所有存储在集合中的数据都是 BSON 格式。
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
1、插入文档
db.集合名称.insert({"_id":1, name":"linging"})
或者
db.集合名称.save({"_id":2, name":"linging"})
//_id为主键,固定,如果没指定主键,则是ObjectId("61aadcbff74a155382b5a3b2")
- save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
- insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
插入一个文档:
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
如:
db.myCollect.insertOne({"_id":2,"name":"linging"})
插入多个文档:
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
如:
db.myCollect.insertMany([{"_id":3, "name":"linging3"},{"_id":4, "name":"linging4"}])
参数说明:
- document:要写入的文档。
- writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。可选,抛出异常的级别。
- ordered:指定是否按顺序写入,默认 true,按顺序写入。
2、更新文档
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
例如:
// 插入一个文档
db.myCollect.insert({
title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
// 更新文档
db.myCollect.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
// 默认multi为false,只会修改查找到的第一条记录,修改为true,会更新查询到的所有记录db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
// 更多例子:
只更新第一条记录:
db.myCollect.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.myCollect.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条:
db.myCollect.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加进去:
db.myCollect.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.myCollect.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一条记录:
db.myCollect.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
3、删除文档
db.collection.remove(
<query>,
<justOne>
)
如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
// 删除所有数据
db.collection.remove({})
//remove过时的替换方法
deleteOne() 和 deleteMany()
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
如:
db.myCollect.remove({"name":"linging"},{justOne:false})
4、查询文档
db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
以易读的方式来查询文档(格式化文档):
db.collection.find().pretty()
查询一个文档:
db.collection.findOne(query)
mongodb与rebms的where使用:
条件操作符:
100 < count < 200
db.collection.find({"count":{$gt:100,$lt:200}})
and条件:
db.collection.find({key1:value1, key2:value2}) //使用逗号隔开,就是and查询
or条件:
db.collection.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)
and与or条件一起使用:
db.collection.find(
{
key1:value1,
$or: [
{key1: value1}, {key2:value2}
]
}
)
5、$type操作符
在使用find进行查询时,可以指定某个条件查询的类型。
db.col.find({"title" : {$type : 2}})
或
db.col.find({"title" : {$type : 'string'}})
// 指定查询的title条件的值为字符串的结果
6、limit与skip
// limit可以指定查询出多少条记录
db.collection.find().limit(NUMBER) //查询number条记录
db.collection.find().limit() //查询所有记录
skip可以指定跳过多少条记录,默认为0
db.collection.find().skip(NUMBER) //跳过指定的number条记录