1. Document-Oriented(面向文档的)
MongoDB 是一种面向文档(document-oriented)的数据库,其内存储的是一种 JSON-like 结构化数据。尽管拥有和关系型数据库 Database/Table 类似的的 DB/Collection 概念,但同一 Collection 内的 Document 可以拥有不同的属性。
(注: 以下 > 提示符表示 mongo JS 代码,>>> 为 Python 代码)
> use testdb
switched to db testdb
> db.users.insert({name:"user1", age:15})
> db.users.insert({name:"user2", age:20, sex:1})
> db.users.find()
{ "_id" : ObjectId("4c479885089df9b53474170a"), "name" : "user1", "age" : 15 }
{ "_id" : ObjectId("4c479896089df9b53474170b"), "name" : "user2", "age" : 20, "sex" : 1 }
可以通过 $exists 判断某个字段是否存在。
> db.users.find({sex:{$exists:true}})
{ "_id" : ObjectId("4c479896089df9b53474170b"), "name" : "user2", "age" : 20, "sex" : 1 }
2. Embed vs. Reference (嵌入 VS 传统关系型数据库的关联引用)
Document 采取 JSON-like 这种层级结构,因此我们可以直接用嵌入(Embed)代替传统关系型数据库的关联引用(Reference)。
> u = db.users.findOne({name:"user1"})
{
"_id" : ObjectId("4c479885089df9b53474170a"),
"name" : "user1",
"age" : 15
}
> u.address = ["address1", "address2"]
[ "address1", "address2" ]
> db.users.save(u)
> db.users.findOne({name:"user1"})
{
"_id" : ObjectId("4c479885089df9b53474170a"),
"name" : "user1",
"age" : 15,
"address" : [
"address1",
"address2"
]
}
> db.users.findOne({address:"address1"})
{
"_id" : ObjectId("4c479885089df9b53474170a"),
"name" : "user1",
"age" : 15,
"address" : [
"address1",
"address2"
]
}
MongoDB 支持以 “.” 分割的 namespace 路径,但需要注意 key 不能以 “$” 开头,不能包含 “.” 字符 (条件表达式中的多级路径须用引号)。
> u = db.users.findOne({address:"address1"})
{
"_id" : ObjectId("4c479885089df9b53474170a"),
"name" : "user1",
"age" : 15,
"address" : [
"address1",
"address2"
]
}
> u.im = {msn:"user1@hotmail.com", qq:12345678}
{ "msn" : "user1@hotmail.com", "qq" : 12345678 }
> db.users.save(u)
> u = db.users.findOne({"im.qq":12345678})
{
"_id" : ObjectId("4c479885089df9b53474170a"),
"name" : "user1",
"age" : 15,
"address" : [
"address1",
"address2"
],
"im" : {
"msn" : "user1@hotmail.com",
"qq" : 12345678
}
}
> u.im.qq
12345678
> u.im.msn
user1@hotmail.com
> db.users.update({"im.qq":12345678}, {$set:{"im.qq":12345}})
> u = db.users.findOne({"im.qq":12345})
{
"_id" : ObjectId("4c479885089df9b53474170a"),
"name" : "user1",
"age" : 15,
"address" : [
"address1",
"address2"
],
"im" : {
"msn" : "user1@hotmail.com",
"qq" : 12345
}
}
> u = db.users.find({"im.qq":{$exists:true}}, {"im.qq":1})
{ "_id" : ObjectId("4c479885089df9b53474170a"), "im" : { "qq" : 12345 } }
注 意: 由于每篇文档都包含完整的 key 数据,因此使用尽可能短的 key 可以有效节省存储空间。
分享到:
相关推荐
MongoDB的安装过程相对简单,支持Windows、Linux和macOS等多种操作系统。在Windows上,可以通过下载安装包进行安装;在Linux系统中,一般通过包管理器如apt或yum来安装。安装完成后,需要配置MongoDB的数据存储目录...
- **非分片环境**: 适用于较小规模的数据集和较低的并发需求。 #### 23. 分片和复制的工作原理 - **分片**: 将数据划分到不同的物理服务器上,提高数据处理能力。 - **复制**: 在多个节点上维护数据的副本,提高...
### MongoDB 主从复制,副本集分布式存储 #### 一、MongoDB 主从复制与副本集的概念 MongoDB 是一种非常流行的非关系型数据库系统,它采用面向文档的数据模型,能够高效地处理大量的非结构化数据。为了提高系统的...
5. 复制集(Replica Set):为了提供高可用性,MongoDB使用复制集来维护数据的副本,确保在主节点故障时有备用节点接管。 二、MongoDB功能特性 1. 查询能力:MongoDB提供了丰富的查询语句,支持复杂查询操作,包括...
5. **分片与复制**:为应对大数据量,MongoDB支持数据分片和副本集,提高读写性能和数据安全性。 **Node.js**: Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用于构建高性能的网络应用。在本项目中,Node...
MongoDB的强大之处还在于其支持大数据处理,可以处理大规模的数据集。它内置了复制集功能以实现数据冗余和高可用性,以及分片(sharding)机制以实现水平扩展,处理海量数据。此外,MongoDB还支持多种数据类型,包括...
复制集则是MongoDB提供的一种高可用性解决方案,通过在多个节点间复制数据来确保服务的持续性。 在"Java使用MongoDB的简单程序"中,我们将学习如何使用Java驱动程序连接到MongoDB数据库。Java驱动程序提供了一套API...
6. **副本集**:MongoDB的副本集技术提供数据冗余和高可用性,通过在多个节点间复制数据,确保服务不中断。 7. **分片**:当数据量过大时,可以使用分片来分散负载,将数据分布在多个物理服务器上,实现水平扩展。 ...
- **MongoDB中的复制**:通过副本集实现数据冗余和负载均衡。 - **复制原理**:主节点负责接收写入操作,其他节点作为副本进行数据同步。 - **复制故障转移**:当主节点出现故障时,可以通过选举过程自动选出新的主...
MongoDB是一个分布式文档型...通过运行这个压缩包中的示例代码,你将能够亲身体验到如何在MongoDB中创建、读取、更新和删除数据,以及如何利用其高级特性进行更复杂的操作。这将为你的MongoDB学习之旅打下坚实的基础。
在使用MongoDB时,开发者和管理员还需要了解如何进行数据备份和恢复、设置复制集以实现高可用性,以及如何进行水平扩展以处理更大的负载。MongoDB提供了丰富的官方文档和社区资源,帮助用户深入理解和使用这个强大的...
另一个重要特性是分片,它允许将大型数据集分布在多台机器上,实现水平扩展。 在“mongodbtest”中,可能还包含了如何设置和管理复制集、分片的步骤,以及如何备份和恢复MongoDB数据的相关教程。这些操作对于理解...
6. **分片(Sharding)**:为了实现水平扩展,MongoDB支持数据分片,即将大型数据集分布在多个机器上。分片可以根据文档的某字段进行范围分片或哈希分片。 7. **复制集(Replication)**:复制集是MongoDB提供高...
安装完成后,需要创建MongoDB的数据存储目录。默认情况下,MongoDB会在`/data/db`下查找数据,如果没有此目录,需要手动创建。运行MongoDB服务可以通过执行`mongod`命令,如果需要指定数据存储路径,可以使用`--...
**Spring MongoDB 中文文档** MongoDB 是一个高性能、开源、无模式的分布式文档数据库,而Spring Data MongoDB 是Spring ...无论是简单的数据操作还是复杂的查询,Spring Data MongoDB 都能提供简洁、强大的解决方案。
4. **分片**: 分片是将大型数据集分散到多台机器上的过程,通过水平分割数据提高读写性能和存储容量。MongoDB使用分片策略将数据自动分配到各个分片服务器。 安装MongoDB的步骤如下: 1. **下载**: 首先,你需要从...
此外,MongoDB的横向扩展能力也使得它在处理大规模数据集时具有很大的优势。 需要注意的是,由于文档是由OCR技术扫描生成,可能存在识别错误或漏识别的情况。在阅读时,需要对可能出现的不连贯或错误的文字进行合理...
4. 弹性恢复:MongoDB提供了复制集功能,可以在多个节点之间进行数据备份,确保数据安全。 5. 动态查询:MongoDB支持丰富的查询语法,可以进行复杂的条件筛选和聚合操作。 二、MongoDB数据模型 MongoDB中的数据是以...