MongoDB 固定集合(Capped Collections)MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素!
创建固定集合我们通过createCollection来创建一个固定集合,且capped选项设置为true:
db.createCollection(“cappedLogCollection”,{capped:true,size:10000})
还可以指定文档个数,加上max:1000属性:
db.createCollection(“cappedLogCollection”,{capped:true,size:10000,max:1000})
判断集合是否为固定集合:
db.cappedLogCollection.isCapped()
如果需要将已存在的集合转换为固定集合可以使用以下命令:
db.runCommand({“convertToCapped”:”posts”,size:10000})
以上代码将我们 ...
MongoDB 原子操作mongodb不支持事务,所以,在你的项目中应用时,要注意这点。无论什么设计,都不要要求mongodb保证数据的完整性。但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。
原子操作数据模型考虑下面的例子,图书馆的书籍及结账信息。
实例说明了在一个相同的文档中如何确保嵌入字段关联原子操作(update:更新)的字段是同步的。
book = { _id: 123456789, title: “MongoDB: The Definitive Guide”, author: [ “Kristina Chodorow”, “Mike Dirolf” ], published_date: ISODate(“2010-09-24”), pages: 216, language: “English”, ...
MongoDB 删除文档在前面的几个章节中我们已经学习了 MongoDB 中如何为集合添加数据和更新数据,在本章节中我们将继续学习 MongoDB 集合的删除。常用的删除文档方法包括 deleteOne()、deleteMany() 以及 findOneAndDelete()。使用场景:数据清理:删除不再需要的旧数据或无效数据。数据修正:在数据修正过程中删除错误的或重复的文档。自动化任务:在自动化脚本或任务中,根据特定条件删除文档。1、deleteOne()deleteOne() 方法用于删除匹配过滤器的单个文档。
语法:db.collection.deleteOne(filter, options)filter:用于查找要删除的文档的查询条件。options(可选):一个可选参数对象。实例db.myCollection.deleteOne({ name: “Alice” });
返回结果:{ “acknowledged”: true, “deletedCount”: 1}2、deleteMany()deleteMany() 方法用于删除所有匹配过滤器的文档。语法:db.c ...
MongoDB 创建集合本章节我们为大家介绍如何使用 MongoDB 来创建集合。MongoDB 中使用 createCollection() 方法来创建集合。语法格式:db.createCollection(name, options)参数说明:
name: 要创建的集合名称。options: 可选参数, 指定有关内存大小及索引的选项。
options 可以是如下参数:
参数名类型描述示例值capped布尔值是否创建一个固定大小的集合。truesize数值集合的最大大小(以字节为单位)。仅在 capped 为 true 时有效。10485760 (10MB)max数值集合中允许的最大文档数。仅在 capped 为 true 时有效。5000validator对象用于文档验证的表达式。{ $jsonSchema: { … }}validationLevel字符串指定文档验证的严格程度。”off”:不进行验证。”strict”:插入和更新操作都必须通过验证(默认)。”moderate”:仅现有文档更新时必须通过验证,插入新文档时不需要。”strict”validationAction字符 ...
MongoDB 分片
分片在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
为什么使用分片
复制所有的写入操作到主节点延迟的敏感数据会在主节点查询单个副本集限制在12个节点当请求量巨大时会出现内存不足。本地磁盘不足垂直扩展价格昂贵
MongoDB分片下图展示了在MongoDB中使用分片集群结构分布:
上图中主要有如下所述三个主要组件:
Shard:用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
Config Server:mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
Query Routers:前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
分片实例分片结构端口分布如下:
Shard Server 1: ...
MongoDB 关系MongoDB 的关系表示多个文档之间在逻辑上的相互联系。文档间可以通过嵌入和引用来建立联系。MongoDB 中的关系可以是:
1:1 (1对1)1: N (1对多) N: 1 (多对1) N: N (多对多)
接下来我们来考虑下用户与用户地址的关系。一个用户可以有多个地址,所以是一对多的关系。以下是 user 文档的简单结构:
{ “_id”:ObjectId(“52ffc33cd85242f436000001”), “name”: “Tom Hanks”, “contact”: “987654321”, “dob”: “01-01-1991”}
以下是 address 文档的简单结构:
{ “_id”:ObjectId(“52ffc4a5d85242602e000000”), “building”: “22 A, Indiana Apt”, “pincode”: 123456, “city”: “Los Angeles”, “state”: “California”}
嵌入式关系使用嵌入式方法,我们可以把用户地址嵌入到用户的 ...
MongoDB 全文检索全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
这个过程类似于通过字典中的检索字表查字的过程。MongoDB 从 2.4 版本开始支持全文检索,目前支持15种语言的全文索引。
danishdutchenglishfinnishfrenchgermanhungarianitaliannorwegianportugueseromanianrussianspanishswedishturkish
启用全文检索MongoDB 在 2.6 版本以后是默认开启全文检索的,如果你使用之前的版本,你需要使用以下代码来启用全文检索:
db.adminCommand({setParameter:true,textSearchEnabled:true})
或者使用命令:
mongod –setParameter textSearchEnabled=true
创建全文索引考虑以下 posts 集合的文档数据,包含了文章内容(post_text)及标签(tags):
...
MongoDB ShellMongoDB Shell 是 MongoDB 提供的官方交互式界面,允许用户与 MongoDB 数据库进行交互、执行命令和操作数据库。MongoDB Shell 是基于 JavaScript 的,允许用户直接在命令行或者脚本中使用 JavaScript 语言来操作 MongoDB 数据库。安装 MongoDB ShellMongoDB Shell 是 MongoDB 数据库安装包的一部分,因此,安装 MongoDB 数据库也会自动安装 MongoDB Shell。在 macOS 上安装 MongoDB Shell
使用 Homebrew 安装:
如果你使用 Homebrew 管理 macOS 上的软件包,可以通过以下命令安装 MongoDB:brew tap mongodb/brewbrew install mongodb-community-shell这将安装 MongoDB 的最新版本及其相关工具,包括 MongoDB Shell。
手动下载安装:另一种方法是从 MongoDB 官网下载适用于 macOS 的 MongoDB Shell,下载地 ...
MongoDB ObjectId
在前面几个章节中我们已经使用了MongoDB 的对象 Id(ObjectId)。在本章节中,我们将了解的ObjectId的结构。ObjectId 是一个12字节 BSON 类型数据,有以下格式:
前4个字节表示时间戳接下来的3个字节是机器标识码紧接的两个字节由进程id组成(PID)最后三个字节是随机数。
MongoDB中存储的文档必须有一个”_id”键。这个键的值可以是任何类型的,默认是个ObjectId对象。在一个集合里面,每个文档都有唯一的”_id”值,来确保集合里面每个文档都能被唯一标识。MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个服务器上同步自动增加主键值既费力还费时。
创建新的ObjectId使用以下代码生成新的ObjectId:
newObjectId = ObjectId()
上面的语句返回以下唯一生成的id:
ObjectId(“5349b4ddd2781d08c09890f3”)
你也可以使用生成的id来取代MongoDB自动生成的ObjectId:
myO ...
MongoDB PHP在php中使用mongodb你必须使用 mongodb 的 php驱动。MongoDB PHP在各平台上的安装及驱动包下载请查看:PHP安装MongoDB扩展驱动如果你使用的是 PHP7,请参阅:PHP7 MongoDB 安装与使用。
确保连接及选择一个数据库
为了确保正确连接,你需要指定数据库名,如果数据库在mongoDB中不存在,mongoDB会自动创建代码片段如下:
test; // 获取名称为 "test" 的数据库
?>
创建集合创建集合的代码片段如下:
test; // 获取名称为 "test" 的数据库
$collection = $db->createCollection("runoob");
echo "集合创建成功";
?>
执行以上程序,输出结果如下:
集合创建成功
插入文档在mongoDB中使用 insert() 方法插入文档:插入文档代码片段如下:
test; // 选择一个数据库
$collection = $db->runoob; // 选择集合
$document = array(
"title ...