服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - 码农宝典:您对MongoDB知多少?

码农宝典:您对MongoDB知多少?

2023-05-07 04:08未知服务器之家 MongoDB

[[410595]] 【51CTO.com快译】 NoSQL数据存储让数据管理方式更加灵活,彻底改变了软件开发的状况。MongoDB是知名的NoSQL解决方案之一,这是一种面向文档的数据存储系统。本文探讨MongoDB是什么以及它如何满足您的应用需求。 MongoDB:文

[[410595]]

【51CTO.com快译】NoSQL数据存储让数据管理方式更加灵活,彻底改变了软件开发的状况。MongoDB是知名的NoSQL解决方案之一,这是一种面向文档的数据存储系统。本文探讨MongoDB是什么以及它如何满足您的应用需求。

MongoDB:文档数据存储系统

关系数据库将信息存储在严格监管的表和列中。MongoDB是一种文档存储系统,将信息存储在集合和文档中。这里的主要区别在于集合和文档是非结构化的,有时称为无模式。这意味着MongoDB实例(集合和文档)的结构不是预定义的,可灵活适应放入其中的任何数据。

文档是一个键值集,其行为与JavaScript等代码中的对象非常相似:它的结构根据放入其中的数据而变化。这使得针对MongoDB等数据存储系统进行编程比针对关系数据存储系统进行编程来得更容易、更灵活。简而言之,应用程序代码和文档数据存储系统之间的交互感觉更自然。

图1直观地显示了MongoDB数据库、集合和文档的结构。

码农宝典:您对MongoDB知多少?

图1. MongoDB文档存储系统

这种类型的数据建模继承的灵活性意味着可以在更加按需使用的基础上处理数据,从而实现此处所述的性能优势。

想具体了解这种差异,不妨比较以下两种实现相同任务(创建记录,然后从应用程序添加字段)的方法,先用关系数据库,之后用MongoDB。

关系数据库中的步骤:

  1. create a database
  2. CREATE DATABASE menagerie; 
  3. create a table in the database:  
  4. USE menagerie; CREATE TABLE pet (name VARCHAR(20)); 
  5. connect to the database in app and issue insert:  
  6. INSERT INTO pet (nameVALUES ('Friar Tuck'); 
  7. add a column:  
  8. ALTER TABLE pet ADD type VARCHAR(20)); 
  9. update existing record:  
  10. UPDATE pet SET type = 'cat' WHERE name = 'Friar Tuck' 

现在用MongoDB执行同样的过程:

  1. connect to the database in app and issue insert:  
  2. use menagerie; db.pet.insertOne({name:"friar tuck"}); 
  3. # issue update:  
  4. db.pet.updateOne({ name:'friar tuck' }, { $set:{ type: 'cat' } } ); 

从前面您可以了解使用MongoDB的开发体验有多流畅。

这种灵活性当然将避免模式臃肿的负担加在了开发人员的身上。驾驭大型应用程序的文档结构至关重要。

MongoDB中的ID字段

关系型数据库中有主键这个概念,这通常是一个合成ID列(也就是说,与业务数据无关的生成值)。在MongoDB中,每个文档都有一个用途相似的_id字段。如果开发人员在创建文档时没有提供 ID,MongoDB引擎将自动生成一个ID(作为 UUID)。

与主键一样,_id 字段自动索引,而且必须是唯一的。

MongoDB中的索引

MongoDB中的索引其行为类似关系数据库中的索引:它创建有关文档字段的额外数据,以加快依赖该字段的查询。MongoDB使用 B 树索引。

可以使用如下语法创建索引:

  1. db.pet.createIndex( { name: 1 } ) 

参数中的整数表示索引是升序(1) 还是降序(-1)。

MongoDB中嵌套文档

MongoDB面向文档结构的一个强大方面是文档可以嵌套。比如说,您可以创建嵌套文档,而不是创建另一个表来存储宠物文档的地址信息,结构如代码片段1所示。

代码片段1. 嵌套文档示例

  1.   "_id""5cf0029caff5056591b0ce7d"
  2.   "name""Friar Tuck"
  3.   "address": { 
  4.     "street""Feline Lane"
  5.     "city""Big Sur"
  6.     "state""CA"
  7.     "zip""93920" 
  8.   }, 
  9.   "type""cat" 

MongoDB中的非规范化

MongoDB等文档存储系统对连接的支持有限,也没有外来键的概念。两者都是数据结构动态特性的结果。MongoDB中的数据建模倾向于非规范化,即复制文档中的数据,而不是将数据严格保存在表孤岛中。这提高了查找速度,不过以增加数据一致性维护为代价。

非规范化不是必需的,在使用面向文档的数据库时更多地是一种倾向。这是由于处理复杂嵌套记录的能力得到了提高,而不是SQL倾向于将数据规范化到特定的单值列中。

MongoDB查询语言

MongoDB中的查询语言面向JSON,就像文档结构一样。这有助于一种非常强大的表达式语法,甚至可以处理复杂的嵌套文档。

比如说,您可以通过执行db.pet.find({ "type" : "cat" })来查询收录所有猫咪的理论数据库,或使用db.pet.find({ "type" : "cat" , "address.state": "CA" })来查询加利福尼亚州的所有猫咪。请注意,查询语言遍历嵌套的地址文档。

MongoDB更新语法

MongoDB的alter语法也使用类似JSON的格式,其中$set关键字表明将更改哪个字段、更改为什么值。set对象通过点表示法支持嵌套文档,如代表片段2所示,可以在其中更改名为“Friar Tuck”的那只猫的邮政编码。

代码片段2. 更新嵌套文档

  1. db.people.update
  2.   { 
  3.     "type""cat"
  4.     "name""Friar Tuck" 
  5.   }, 
  6.   { 
  7.      $set: { 
  8.        "address.zip""86004" 
  9.      } 
  10.   } 

可以从代码片段2中看到,更新语法与SQL对应语法一样强大,实际上更强大。

MongoDB云和部署选项

MongoDB为可扩展性和分布式部署而设计。它完全能够处理大规模工作负载。

MongoDB公司在MongoDB Atlas中提供了多云数据库集群解决方案。MongoDB Atlas就像一个托管数据库,可以横跨不同的云平台,包括监控和容错等企业功能。

不难看出MongoDB的重要性,因此AWS的Amazon DocumentDB产品将MongoDB兼容性作为主要卖点。微软的Azure Cosmos DB遵循类似的模式,支持MongoDB API。

MongoDB中的高可用性

MongoDB支持副本集以实现高可用性。核心思想是将数据一次写入主实例,然后复制到二级存储以便读取。在此处(https://docs.mongodb.com/manual/replication/)可了解有关MongoDB中复制的更多信息。

结论是,MongoDB是一种领先的 NoSQL 解决方案,兑现了灵活模式数据存储系统的承诺。可使用面向几乎各种编程语言的高级驱动程序,您也可以利用众多部署选项。

原文标题:What is MongoDB? A quick guide for developers,作者:Matthew Tyson

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

延伸 · 阅读

精彩推荐
  • MongoDBmongodb数据库基础知识之连表查询

    mongodb数据库基础知识之连表查询

    这篇文章主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参...

    ZJW02155642020-05-22
  • MongoDBWindows下MongoDB配置用户权限实例

    Windows下MongoDB配置用户权限实例

    这篇文章主要介绍了Windows下MongoDB配置用户权限实例,本文实现需要输入用户名、密码才可以访问MongoDB数据库,需要的朋友可以参考下 ...

    MongoDB教程网3082020-04-29
  • MongoDBMongoDB的索引

    MongoDB的索引

    数据库中的索引就是用来提高查询操作的性能,但是会影响插入、更新和删除的效率,因为数据库不仅要执行这些操作,还要负责索引的更新 ...

    MongoDB教程网2532020-05-12
  • MongoDB在mac系统下安装与配置mongoDB数据库

    在mac系统下安装与配置mongoDB数据库

    这篇文章主要介绍了在mac系统下安装与配置mongoDB数据库的操作步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    CXYhh1219312021-11-14
  • MongoDBMongoDB系列教程(五):mongo语法和mysql语法对比学习

    MongoDB系列教程(五):mongo语法和mysql语法对比学习

    这篇文章主要介绍了MongoDB系列教程(五):mongo语法和mysql语法对比学习,本文对熟悉Mysql数据库的同学来说帮助很大,用对比的方式可以快速学习到MongoDB的命...

    MongoDB教程网3252020-05-01
  • MongoDBMongodb索引的优化

    Mongodb索引的优化

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。接下来通过本文给大家介绍Mongodb索引的优化,本文介绍的非常详细,具有参考借鉴价值,感...

    MRR3252020-05-05
  • MongoDBMongoDB多条件模糊查询示例代码

    MongoDB多条件模糊查询示例代码

    这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值...

    浅夏晴空5902020-05-25
  • MongoDBMongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    这篇文章主要给大家介绍了关于MongoDB查询之高级操作(多条件查询、正则匹配查询等)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者...

    w田翔3872020-12-19