mongodb 教程
mongodb 使用教程
一、配置并访问数据库
1. 配置数据库参数mongod.conf
systemLog: #配置系统日志,记录系统的启动记录、错误日志
destination: file #配置日志的保存方式
logAppend: true #配置文件追加模式
path: /var/log/mongodb/mongod.log #日志路径
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# wiredTiger:
# how the process runs
processManagement:
fork: true # 后台守护进程
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # 绑定访问IP,若为0.0.0.0则不限制地址
security:
authorization: enabled #启用身份鉴别功能
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
auditLog: #启用数据库审计功能,目前仅企业版支持
destination: file #配置审计日志存储类型,可为console、file、syslog
format: BSON #配置审计日志格式,可以为JSON、BSON,若为BSON,则审计日志需要借助bsondump进行查看,如 bsondump /var/log/auditlog.bson
path: data/db/auditLog.bson #审计日志保存路径
#snmp:
2. 启用数据库
a. mongod --config /etc/mongod.conf #通过配置文件启用数据库
b. mongod --dbpath data/db --auditDestination file --auditFormat BSON --auditPath data/db/auditLog.bson
通过添加参数启用数据库
3.登录数据库
a. 若配置了数据库环境,则直接使用mongo登录数据库
b. 若未配置环境,则先进入数据库目录/bin下,使用./mongo登录数据库
二、数据库的简单使用
1. mongodb构成
mongodb数据库由数据库(database)、集合(collection)、文档(document)组成。
其中一个mongodb实例可以创建多个数据库。
一个数据库可以创建多个集合(类似MySQL的表)。
一个集合由多个文档构成(文档相当于MySQL表里的行,是数据库的基本单元)。
一个文档中可以存在多个字段(相当于MySQL里的列)
2. mongodb的内建库
admin库:主要存放数据库账号的相关信息。
local库:local库永远不会被复制到从节点,可以用来存放仅限于本地管理的集合,副本配置信息、oplog等。
config库:用于分片集群环境,存放了分片相关的元数据信息。
test库:mongodb默认创建的测试库,当连接数据库时不指定对应的库, 默认会连接到test库。拓展:Oplog 是用于存储 MongoDB 数据库所有数据的操作记录的(实际只记录增删改和一些系统命令操作,查是不会记录的),有点类似于 mysql 的 binlog 日志。
3. 数据库的简单使用
3.1 创建数据库
语法:use Database_name
#使用 use 加数据库名称,若数据库存在,则切换到指定数据库,若不存在,则创建该数据库。
> use demo #创建demo数据库
switched to db demo
> show dbs #查找所有数据库
admin 0.000GB
config 0.000GB
local 0.000GB
> db.demo.insert({'name':'测试'}) #插入数据
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
config 0.000GB
demo 0.000GB
local 0.000GB
> show tables #查看当前数据库下的集合
demo
数据库创建后,若不插入数据,默认是不显示的,需要向数据库中插入数据后才能显示。
3.2 删除数据库
语法:db.dropDatabase() #表示删除当前数据库
> db
demo
> db.dropDatabase()
{ "dropped" : "demo", "ok" : 1 }
> db
demo
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
3.3 创建集合
语法:db.createCollection(name,options)
name:指定集合的名称
options:可选参数,如下
字段 | 类型 | 描述 |
capped | 布尔 | (可选)若为true,则创建固定大小的集合,当集合达到指定大小时,会自动覆盖旧文档,并需要配置size参数 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数 |
max | 数值 | (可选)指定固定集合中文档的最大数量 |
在插入文档时,mongodb会先检查固定集合的size字段,再检查max字段;
> db.createCollection('mytest',{capped:true,size:2000,max:100})
{ "ok" : 1 }
3.4 删除集合
语法:db.collection_name.drop() #删除指定的集合
> db #显示当前库
demo
> show collections #显示数据库下的集合,和show tables类似
demo
test
> db.test.drop() #删除集合
true
> show collections
demo
>
3.5 插入文档
语法:db.collection_name.insert() #若插入的数据主键已经存在,则会抛出org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
或使用
db.COLLECTION_NAME.save(document) #新版本已弃用,采用db.collection.insertOne()和db.collection.replaceOne()来替代。
> db.mytest.insert({'name':'黎明'})
WriteResult({ "nInserted" : 1 })
> db.mytest.find()
{ "_id" : ObjectId("609640173131453fc5ed5767"), "name" : "黎明" }
#只插入一个文档
> db.mydemo.insertOne(
... {
... name: "sue",
... age: 19,
... status: "P"
... }
... )
#返回值
{
"acknowledged" : true,
"insertedId" : ObjectId("6096429f3131453fc5ed5769")
}
> db.mydemo.find()
{ "_id" : ObjectId("6096429f3131453fc5ed5769"), "name" : "sue", "age" : 19, "status" : "P" }
#同时插入多个文档
> db.mydemo.insertMany(
[
{name:'李一',age:1},
{name:'李二',age:2},
{name:'李三',age:3}
]
)
#以下为返回值
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("609643463131453fc5ed576a"),
ObjectId("609643463131453fc5ed576b"),
ObjectId("609643463131453fc5ed576c")
]
}
> db.mydemo.find()
{ "_id" : ObjectId("6096429f3131453fc5ed5769"), "name" : "sue", "age" : 19, "status" : "P" }
{ "_id" : ObjectId("609643463131453fc5ed576a"), "name" : "李一", "age" : 1 }
{ "_id" : ObjectId("609643463131453fc5ed576b"), "name" : "李二", "age" : 2 }
{ "_id" : ObjectId("609643463131453fc5ed576c"), "name" : "李三", "age" : 3 }
拓展-同样能实现插入效果的方法
db.collection.update() 当upsert为true时//第三个参数
db.collection.updateOne() 当upsert为true时//第三个参数
db.collection.updateMany() 当upsert为true时//第三个参数
db.collection.findAndModify() 当upsert为true时
db.collection.findAndModify() 当upsert为true时
db.collection.findOneAndReplace() 当upsert为true时
db.collection.bulkWrite()