1、基础概念 下表将帮助您更容易理解MonGo中的一些概念: sql术语/概念 mongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row
下表将帮助您更容易理解MonGo中的一些概念:
sql术语/概念 | mongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
数据类型 | 描述 |
---|---|
String | 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 |
Integer | 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 |
Boolean | 布尔值。用于存储布尔值(真/假)。 |
Double | 双精度浮点值。用于存储浮点值。 |
Min/Max keys | 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 |
Array | 用于将数组或列表或多个值存储为一个键。 |
Timestamp | 时间戳。记录文档修改或添加的具体时间。 |
Object | 用于内嵌文档。 |
Null | 用于创建空值。 |
Symbol | 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 |
Date | 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 |
Object ID | 对象 ID。用于创建文档的 ID。 |
Binary Data | 二进制数据。用于存储二进制数据。 |
Code | 代码类型。用于在文档中存储 javascript 代码。 |
Regular expression | 正则表达式类型。用于存储正则表达式。 |
下面说明一下几种重要的数据类型。
ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:
MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象
由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间:
> var newObject = ObjectId()
> newObject.getTimestamp()
ISODate("2017-11-25T07:21:10Z")
ObjectId 转为字符串
> newObject.str
5a1919e63Df83ce79df8b38f
一个mongodb 中可以建立多个数据库。(一个数据库可以创建多个集合,一个集合可以包括多个文档。)
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
数据库名 | 特殊作用 |
---|---|
admin | 权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。 |
local | 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。 |
config | 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。 |
执行 "db" 命令可以显示当前数据库对象或集合。
运行 "use" 命令,可以连接到一个指定的数据库。
user 数据库名称
删除数据库(慎用!!!)
db.dropDatabase()
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。一个数据库可以创建多个集合,一个集合是讲相同类型的文档管理起来。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
比如,我们可以将以下不同数据结构的文档插入到集合中:
{"site":"https://my.oschina.net/tingqianyunluo"}
{"site":"Https://www.zhihu.com/people/tingqianyunluo/posts","name":"庭前云落的知乎"}
{"site":"https://www.jianshu.com/u/a260a4c93d26","name":"简书","num":6}
当第一个文档插入时,集合就会被创建。
创建集合
db.createCollection(name, options)
name: 新创建的集合名称
options: 创建参数
-- 实例
use demo
db.createCollection("student")
show dbs
删除集合
db.集合名词.drop()
-- 实例
use demo
show collections
db.student.drop()
文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
文档示例:
{"site":"https://my.oschina.net/tingqianyunluo", "name":"庭前云落"}
下表列出了 RDBMS 与 MongoDB 对应的术语:
RDBMS | MongoDB |
---|---|
数据库 | 数据库 |
表格 | 集合 |
行 | 文档 |
列 | 字段 |
表联合 | 嵌入文档 |
主键 | 主键 (MongoDB 提供了 key 为 _id ) |
数据库服务和客户端 | |
---|---|
Mysqld/oracle | mongod |
mysql/sqlplus | mongo |
每个文档默认以_id为主键,主键默认类型为ObjectId(对象类型)
mongodb会自动生成主键值
db.集合名称.insert(document)
-- 实例
db.student.insert({"name":"tqyl","age":10})
查询全部
db.集合名称.find()
-- 实例
db.student.find()
查询符合条件的记录
db.集合名称.find(jsON条件)
-- 实例
db.student.find({"name":"tqyl"})
投影查询
db.集合名称.find(JSON条件,{显示字段名:1 ,不显示字段名:0 , ...})
-- 实例
db.student.find({"name":"tqyl"},{name:1,age:1,_id:0})
db.collection.update(
,
,
)
query:查询条件,相当于sql语句的where
update:更新文档内容
options:选项
替换文档
db.student.update({"name":"tqyl"},{"name":"庭前云落","age":21})
$set修改器
db.student.update({"name":"庭前云落"},{$set: {"name":"庭前云落666"} })
multi 替换所有
db.student.update({"name":"庭前云落666"},{$set:{ "age":15}},{multi:true})
删除符合条件的文档
db.集合名称.remove()
query:删除条件,相当于sql语句中的where
db.student.remove({"name":"庭前云落666"})
通过id删除
db.student.remove({"_id" : ObjectId("5ee1de68e8f3d5213a6e6cb8")})
删除所有文档
db.student.remove({})
db.createUser({
user: "",
pwd: "",
customData: { },
roles: [
{ role: "", db: "" } | "",
...
]
})
-- 创建root用户,角色为root
use admin
db.createUser({
user:"root",
pwd:"root",
roles:[{role:"root",db:"admin"}]
})
角色分类 | 取值 |
---|---|
超级用户角色 | root |
数据库用户角色 | read、readWrite |
数据库管理角色 | dbAdmin、dbOwner、userAdmin |
集群管理角色 | clusterAdmin、clusterManager、hostManager、clusterMonitor |
备份恢复角色 | backup、restore |
所有数据库角色 | readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase |
角色名 | 描述 |
---|---|
root | 只在admin数据库中可用。超级账号,超级权限 |
Read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
show users
db.updateUser(
"",
{
customData : { },
roles : [
{ role: "", db: "" } | "",
...
],
pwd: ""
},
writeConcern: { }
)
-- 修改root用户的角色为readWriteAnyDatabase
use admin
db.updateUser("root",{roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
语法格式
db.changeUserPassword("username","newPasswd")
-- 修改root用户的密码为1234
use admin
db.changeUserPassword("root","1234")
db.dropUser("用户名")
-- 实例
db.dropUser("root")
--结束END--
本文标题: MongoDB学习(二) --- 概念解析、命令行基本操作
本文链接: https://www.lsjlt.com/news/6602.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-11
2024-05-11
2024-05-11
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0