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 ...
MongoDB Map ReduceMap-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。
MapReduce 命令以下是MapReduce的基本语法:
db.collection.mapReduce( function() {emit(key,value);}, //map 函数 function(key,values) {return reduceFunction}, //reduce 函数 { out: collection, query: document, sort: document, limit: number })
使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value),遍历 collection 中所有的记录, 将 key 与 val ...
MongoDB Limit 与 Skip 方法MongoDB Limit() 方法如果你需要在 MongoDB 中读取指定数量的数据记录,可以使用 MongoDB 的 limit() 方法,如果想跳过指定数量的文档读取数据可以使用 skip() 方法。
limit() 方法用于限制查询结果返回的文档数量,而 skip() 方法用于跳过指定数量的文档。这两个方法通常一起使用,可以用来实现分页查询或在大型数据集上进行分批处理。limit() 方法limit() 方法用于限制查询结果返回的文档数量。语法limit() 方法基本语法如下所示:
db.collection.find().limit():返回的文档数量。实例// 返回前 10 个文档db.myCollection.find().limit(10);
实例集合 col 中的数据如下:
{ “_id” : ObjectId(“56066542ade2f21f36b0313a”), “title” : “PHP 教程”, “description” : “PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。” ...
MongoDB GridFSGridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片、音频、视频等)。GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。GridFS 可以更好的存储大于16M的文件。GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。
GridFS 用两个集合来存储一个文件:fs.files与fs.chunks。每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中。
以下是简单的 fs.files 集合文档:
{ “filename”: “test.txt”, “chunkSize”: NumberInt(261120), “uploadDate”: ISODate(“2014-04-13T11:32:33.557Z”), “md5”: “7b762939 ...