兰州市住房城乡建设局网站,广州网站设计提供商,找效果图的网站哪个好,小程序制作二维码MongoDB之客户端工具与核心概念及基本类型篇 文章目录 MongoDB之客户端工具与核心概念及基本类型篇1. MongoDB是什么?1. 关于MongoDB2. 相关客户端工具1. MongoDB Compass2. Studio 3T3. Navicat for MongoDB4. NoSQL Manager for MongoDB Professional 2.MongoDB相关概念2.1 …MongoDB之客户端工具与核心概念及基本类型篇 文章目录 MongoDB之客户端工具与核心概念及基本类型篇1. MongoDB是什么?1. 关于MongoDB2. 相关客户端工具1. MongoDB Compass2. Studio 3T3. Navicat for MongoDB4. NoSQL Manager for MongoDB Professional 2.MongoDB相关概念2.1 数据库2.2 文档(Document)2.3 集合2.3.1 合法的集合名2.3.2 capped collections 2.4 元数据2.5 MongoDB 数据类型2.5.1 ObjectId2.5.2 字符串2.5.3 时间戳2.5.4 日期 4. 基本操作1. DB Operations(数据库操作)2. Collection Operations(集合操作)3. Document Operations(文档操作)3.1 Insert Documents(插入文档) Additional Methods for Inserts 1. MongoDB是什么?
1. 关于MongoDB 官网地址MongoDB MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. No database makes you more productive. MongoDB是为现代应用程序开发人员和云时代构建的通用的、基于文档的分布式数据库。没有数据库能让你更有效率。 2. 相关客户端工具
1. MongoDB Compass 官方出品免费 官网地址https://www.mongodb.com/download-center/compass MongoDB Compass 是一个功能强大的 GUI用于在可视化环境中查询、聚合和分析 MongoDB 数据。 Compass 可免费使用且源代码可用并且可以在 macOS、Windows 和 Linux 上运行。 使用 CompassMongoDB 的 GUI轻松浏览和操作您的数据库。Compass 直观而灵活提供详细的架构可视化、实时性能指标、复杂的查询功能等等。 请注意MongoDB Compass 有三个版本具有所有功能的完整版本、没有写入或删除功能的只读版本以及唯一网络连接到 MongoDB 实例的独立版本。有关更多信息请参阅官网文档的文档页面。 完整版本具有所有特性和功能。 只读版: 此版本严格限制为读取操作删除了所有写入和删除功能。 独立版: 此版本禁用除MongoDB实例连接之外的所有网络连接。 2. Studio 3T Studio 3TMongoDB的终极GUI,用于MongoDB的所有IDE、客户端和GUI工具——在Atlas上或任何地方。 官网Studio 3T 注意收费 3. Navicat for MongoDB 下载 Navicat | 下载 Navicat for MongoDB 14 天 Windows、macOS 和 Linux 的试用版 注意收费 4. NoSQL Manager for MongoDB Professional 用于 MongoDB 数据库管理、管理和开发的桌面 GUI 客户端 下载地址Download NoSQL Manager for MongoDB (mongodbmanager.com) 注意收费 2.MongoDB相关概念
在mongodb中基本的概念是文档、集合、数据库下面我们挨个介绍。
下表将帮助您更容易理解Mongo中的一些概念
SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins表连接,MongoDB不支持primary keyprimary key主键,MongoDB自动将_id字段设置为主键
2.1 数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为db该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库每一个都有自己的集合和权限不同的数据库也放置在不同的文件中。
“show dbs” 命令可以显示所有数据的列表。
$ ./mongo
MongoDB shell version: 3.0.6
connecting to: testshow dbs
local 0.078GB
test 0.078GB执行 “db” 命令可以显示当前数据库对象或集合。
$ ./mongo
MongoDB shell version: 3.0.6
connecting to: testdb
test运行use命令可以连接到一个指定的数据库。 use local
switched to db localdb
local以上实例命令中“local” 是你要链接的数据库。
在下一个章节我们将详细讲解MongoDB中命令的使用。
数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。
不能是空字符串“”)。不得含有’ 空格)、.、$、/、\和\0 (空字符)。应全部小写。最多64字节。
有一些数据库名是保留的可以直接访问这些有特殊作用的数据库。
admin 从权限的角度来看这是root数据库。要是将一个用户添加到这个数据库这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行比如列出所有的数据库或者关闭服务器。local: 这个数据永远不会被复制可以用来存储限于本地单台服务器的任意集合config: 当Mongo用于分片设置时config数据库在内部使用用于保存分片的相关信息。 2.2 文档(Document)
文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段并且相同的字段不需要相同的数据类型这与关系型数据库有很大的区别也是 MongoDB 非常突出的特点。
一个简单的文档例子如下
{site:www.百度.com, name:mongo教程}下表列出了 RDBMS 与 MongoDB 对应的术语
RDBMSMongoDB数据库数据库表格集合行文档列字段表联合嵌入文档主键主键 (MongoDB 提供了 key 为 _id )数据库服务和客户端Mysqld/Oraclemongodmysql/sqlplusmongo
需要注意的是
文档中的键/值对是有序的。文档中的值不仅可以是在双引号里面的字符串还可以是其他几种数据类型甚至可以是整个嵌入的文档)。MongoDB区分类型和大小写。MongoDB的文档不能有重复的键。文档的键是字符串。除了少数例外情况键可以使用任意UTF-8字符。
文档键命名规范
键不能含有\0 (空字符)。这个字符用来表示键的结尾。.和$有特别的意义只有在特定环境下才能使用。以下划线_开头的键是保留的(不是严格要求的)。 2.3 集合
集合就是 MongoDB 文档组类似于 RDBMS 关系数据库管理系统Relational Database Management System)中的表格。
集合存在于数据库中集合没有固定的结构这意味着你在对集合可以插入不同格式和类型的数据但通常情况下我们插入集合的数据都会有一定的关联性。
比如我们可以将以下不同数据结构的文档插入到集合中
{site:www.baidu.com}
{site:www.google.com,name:Google}
{site:www.ali.com,name:abc,num:5}当第一个文档插入时集合就会被创建。
2.3.1 合法的集合名
集合名不能是空字符串。集合名不能含有\0字符空字符)这个字符表示集合名的结尾。集合名不能以system.开头这是为系统集合保留的前缀。用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合否则千万不要在名字里出现$。
如下实例
db.col.findOne()2.3.2 capped collections
Capped collections 就是固定大小的collection。
它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 “RRD” 概念类似。
Capped collections 是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能和标准的 collection 不同你必须要显式的创建一个capped collection指定一个 collection 的大小单位是字节。collection 的数据存储空间值提前分配的。
Capped collections 可以按照文档的插入顺序保存到集合中而且这些文档在磁盘上存放位置也是按照插入顺序来保存的所以当我们更新Capped collections 中文档的时候更新后的文档不可以超过之前文档的大小这样话就可以确保所有文档在磁盘上的位置一直保持不变。
由于 Capped collection 是按照文档的插入顺序而不是使用索引确定插入位置这样的话可以提高增添数据的效率。MongoDB 的操作日志文件 oplog.rs 就是利用 Capped Collection 来实现的。
要注意的是指定的存储大小包含了数据库的头信息。
db.createCollection(mycoll, {capped:true, size:100000})在 capped collection 中你能添加新的对象。能进行更新然而对象不会增加存储空间。如果增加更新就会失败 。使用 Capped Collection 不能删除一个文档可以使用 drop() 方法删除 collection 所有的行。删除之后你必须显式的重新创建这个 collection。在32bit机器中capped collection 最大存储为 1e9( 1X109)个字节。 2.4 元数据
数据库的信息是存储在集合中。它们使用了系统的命名空间
dbname.system.*在MongoDB数据库中名字空间 .system.* 是包含多种系统信息的特殊集合(Collection)如下:
集合命名空间描述dbname.system.namespaces列出所有名字空间。dbname.system.indexes列出所有索引。dbname.system.profile包含数据库概要(profile)信息。dbname.system.users列出所有可访问数据库的用户。dbname.local.sources包含复制对端slave的服务器信息和状态。
对于修改系统集合中的对象有如下限制。
在{{system.indexes}}插入数据可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。
{{system.users}}是可修改的。 {{system.profile}}是可删除的。 2.5 MongoDB 数据类型
下表为MongoDB中常用的几种数据类型。
数据类型描述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正则表达式类型。用于存储正则表达式。
下面说明下几种重要的数据类型。
2.5.1 ObjectId
ObjectId 类似唯一主键可以很快的去生成和排序包含 12 bytes含义是
前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间比北京时间晚了 8 个小时接下来的 3 个字节是机器标识码紧接的两个字节由进程 id 组成 PID最后三个字节是随机数 MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的默认是个 ObjectId 对象
由于 ObjectId 中保存了创建的时间戳所以你不需要为你的文档保存时间戳字段你可以通过 getTimestamp 函数来获取文档的创建时间: var newObject ObjectId()newObject.getTimestamp()
ISODate(2017-11-25T07:21:10Z)ObjectId 转为字符串 newObject.str
5a1919e63df83ce79df8b38f2.5.2 字符串
BSON 字符串都是 UTF-8 编码。
2.5.3 时间戳
BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。其中
前32位是一个 time_t 值与Unix新纪元相差的秒数后32位是在某秒中操作的一个递增的序数
在单个 mongod 实例中时间戳值通常是唯一的。
在复制集中 oplog 有一个 ts 字段。这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中你可以使用 BSON 日期类型。 2.5.4 日期
表示当前距离 Unix新纪元1970年1月1日的毫秒数。日期类型是有符号的, 负数表示 1970 年之前的日期。 var mydate1 new Date() //格林尼治时间mydate1
ISODate(2018-03-04T14:58:51.233Z)typeof mydate1
objectvar mydate2 ISODate() //格林尼治时间mydate2
ISODate(2018-03-04T15:00:45.479Z)typeof mydate2
object这样创建的时间是日期类型可以使用 JS 中的 Date 类型的方法。
返回一个时间类型的字符串 var mydate1str mydate1.toString()mydate1str
Sun Mar 04 2018 14:58:51 GMT0000 (UTC) typeof mydate1str
string或者 Date()
Sun Mar 04 2018 15:02:59 GMT0000 (UTC) 4. 基本操作
1. DB Operations(数据库操作) 查看数据库 show dbs
#执行上面命令后可看到MongoDB默认的三个数据库如下
admin 0.000GB
config 0.000GB
local 0.000GBadmin 从权限的角度来看这是root数据库。要是将一个用户添加到这个数据库这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行比如列出所有的数据库或者关闭服务器。 local: 这个数据永远不会被复制可以用来存储限于本地单台服务器的任意集合。 config: 当Mongo用于分片设置时config数据库在内部使用用于保存分片的相关信息。 创建数据库 use DB_NAME
# 如果数据库不存在则创建数据库否则切换到指定数据库。
# 例创建一个名称为 demo 的数据库
use demo
# 注意创建完demo数据库后如果数据库下没有集合则数据库存储在内存中只有当数据库下创建了集合(集合下的文档可有可无)时demo数据库才会被持久化删除数据库 db.dropDatabase(); # 删除当前的数据库可使用db命令查看当前使用的数据库是哪个2. Collection Operations(集合操作) 创建集合,以demo数据库为例 use demo;
# 语法1:
db.createCollection(name,options);
# 1.创建一个名称为student的集合
db.createCollection(student);参数说明 name: 要创建的集合名称必选参数options: 可选参数, 指定有关内存大小及索引的选项可选参数 options 可以是如下参数 字段类型描述capped布尔可选如果为 true则创建固定集合。固定集合是指有着固定大小的集合当达到最大值时它会自动覆盖最早的文档。 当该值为 true 时必须指定 size 参数。autoIndexId布尔可选如为 true自动在 _id 字段创建索引。默认为 false。size数值可选为固定集合指定一个最大值以千字节计KB。 如果 capped 为 true也需要指定该字段。max数值可选指定固定集合中包含文档的最大数量。在插入文档时MongoDB 首先检查固定集合的 size 字段然后检查 max 字段。 查看集合 show collections;删除集合 # 语法
db.collection.drop();
# 举例,删除集合名称为 mydemo的集合
db.mydemo.drop(); # 删除成功返回true,失败返回false
# 注意删除集合时会将集合下的所有文档删除3. Document Operations(文档操作)
3.1 Insert Documents(插入文档) 常用命令及说明 db.collection.insertOne()Inserts a single document into a collection.db.collection.insertMany()db.collection.insertMany() inserts multiple documents into a collection.db.collection.insert()db.collection.insert() inserts a single document or multiple documents into a collection.Additional Methods for Inserts 插入文档的附加方法 The following methods can also add new documents to a collection: 以下方法还可以向集合中添加新文档 db.collection.update() when used with the upsert: true option.db.collection.updateOne() when used with the upsert: true option.db.collection.updateMany() when used with the upsert: true option.db.collection.findAndModify() when used with the upsert: true option.db.collection.findOneAndUpdate() when used with the upsert: true option.db.collection.findOneAndReplace() when used with the upsert: true option.db.collection.save().db.collection.bulkWrite(). See the individual reference pages for the methods for more information and examples. 举例 插入单个文档到集合中JSON对象 db.user.insertOne({name:张三,age:NumberInt(22),gender:男,address:西安市});插入多个文档到集合中JSON数组 db.user.insertMany([{name:李四,age:NumberInt(55),gender:男,address:宝鸡市},{name:莉莉,age:NumberInt(12),gender:女,address:铜川市}]);插入单个或多个文档到集合中 # 插入单个文档JSON对象
db.user.insert({user:{name:王五},email:[{email:111qq.com},{email:xxx163.com}],cards:[{bankName:中国建设银行,card:1245678},{bankName:中国邮政银行,card:797161616}]});
# 插入多个文档,其实就是JSON数组
db.user.insert(
{user:{name:玛利亚},email:[{email:7898qq.com},{email:xxx163.com}],cards:[{bankName:中国建设银行,card:22222},{bankName:中国邮政银行,card:111111}]},
{user:{name:马云},email:[{email:11111qq.com},{email:yyyy163.com}],cards:[{bankName:中国人民银行,card:22222},{bankName:中国银行,card:111111}]}
);