共计 4676 个字符,预计需要花费 12 分钟才能阅读完成。
之前写了 Docker 搭建 mongodb 以及可视化界面 mongo-express,虽然大部分时候可以使用可视化界面,但是当没有可视化界面时,总得需要命令行操作 mongo 吧!阿蛮君这里就分享一下 mongo 的详细使用教程。
一、登录
1 方式一
mongo
use admin
db.auth('admin', 'Abc123++')
2 方式二
mongo admin -u admin -p Abc123++
二、用户权限问题
1 为当前数据库创建用户
默认创建的数据库是没有用户的。
use dc_client
# 创建用户
db.createUser({
user: 'admin',
pwd: 'unipower123',
roles:[{
role: 'readWrite',
db: 'dc_client'
}]
})
MongoDB 数据库默认角色
角色描述 | 角色标识 |
---|---|
数据库用户角色 | read、readWrite |
数据库管理角色 | dbAdmin、dbOwner、userAdmin |
集群管理角色 | clusterAdmin、clusterManager、clusterMonitor、hostManager |
备份恢复角色 | backup、restore |
所有数据库角色 | readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase |
超级用户角色 | root |
2 查看当前库下的用户
use myMongoDB
# 查看当前库下的用户
show users
三、使用
1 数据库
1.1 创建数据库
use dbName
如果数据库不存在,则创建数据库,否则切换到指定数据库。
1.2 查看所有数据库
show dbs
1.3 删除数据库
// 删除当前数据库
db.dropDatabase()
2 集合
2.1 创建集合
db.createCollection(name, options)
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
例:
# 方式一
db.createCollection("mycol")
# 方式二
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
# 方式三 (插入文档同时创建集合)
db.mycol.insert( {"x": 11} )
2.2 查看集合
show collections
2.3 删除集合
# 创建 db
use mydb
# 创建集合
db.createCollection("mycol")
# 删除集合
db.mycol.drop()
3 文档
3.1 插入文档
1、方式一
db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(document)
2、方式二
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
3、方式三(多个文档插入)
db.collection.insertMany(
[ <document>, <document> ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
- document:要写入的文档。
- writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
- ordered:指定是否按顺序写入,默认 true,按顺序写入。
例:
db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
3.2 更新文档
1、方式一
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.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
// 修改多条相同的文档
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
2、方式二
save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
3.3 删除文档
1、删除匹配文档
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
2、删除所有文档
db.col.remove({})
3.4 查询文档
1、全部查询
// 第一种
db.collection.find(query, projection)
// 第二种
db.col.find().pretty()
例:
db.col.find().pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
2、条件查询
db.col.find({"by":"菜鸟教程"}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
其他操作
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } |
db.col.find({"by":"菜鸟教程"}).pretty() |
where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大于 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
3、AND 条件查询
db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
以上实例中类似于 WHERE 语句:WHERE by='菜鸟教程' AND title='MongoDB 教程'
4、OR 条件查询
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
例:
db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
5、AND 和 OR 联合使用
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
以上实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: 'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
提醒:本文发布于157天前,文中所关联的信息可能已发生改变,请知悉!