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()  
posted @ 2021-05-08 17:31  达标  阅读(169)  评论(0编辑  收藏  举报