[mongo] 1.1 mongodb基本介绍

举报
dber 发表于 2021/01/21 16:23:45 2021/01/21
【摘要】 MongoDB是一个文档数据库,旨在简化开发和扩展。该手册介绍了MongoDB中的关键概念,介绍了查询语言,并提供了操作和管理方面的考虑因素与过程以及全面的参考部分。MongoDB提供数据库的社区版和企业版:MongoDB社区是MongoDB的可用源和免费版本。MongoDB Enterprise作为MongoDB Enterprise Advanced订阅的一部分提供,并且包括对Mongo...

MongoDB是一个文档数据库,旨在简化开发和扩展。该手册介绍了MongoDB中的关键概念,介绍了查询语言,并提供了操作和管理方面的考虑因素与过程以及全面的参考部分。

MongoDB提供数据库的社区版和企业版:

  • MongoDB社区是MongoDB的可用源和免费版本。
  • MongoDB Enterprise作为MongoDB Enterprise Advanced订阅的一部分提供,并且包括对MongoDB部署的全面支持。MongoDB Enterprise还添加了以企业为中心的功能,例如LDAP和Kerberos支持,磁盘上的加密以及审核。

文档数据库

MongoDB中的记录是一个文档,它是由field 和 value对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,arrays (数组)和arrays of documents(文档数组)。

MongoDB文档。

使用文档的优点是:

  • 文档(即对象)对应于许多编程语言中的本机数据类型。
  • 嵌入式文档和数组减少了对高成本的连接需求。
  • 动态模式支持流畅的多态性。



Collections/Views/On-Demand Materialized Views

MongoDB将文档存储在集合中。集合类似于关系数据库中的表。

除集合外,MongoDB还支持:

关键特性

高性能

MongoDB提供高性能的数据持久性。特别是,

  • 对嵌入式数据模型(embedded data models)的支持减少了数据库系统上的I/O动作。
  • 索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键(embedded documents and arrays)

丰富的查询语言

MongoDB支持丰富的查询语言以支持读写操作(CRUD)以及:

另外:

高可用性

MongoDB的复制工具(称为副本集 replica set)提供:

  • 自动故障转移
  • 数据冗余。

副本集是一组保持相同的数据集,从而提供冗余和提高数据可用性的MongoDB服务器。

水平可伸缩性

MongoDB提供水平可伸缩性作为其核心 功能的一部分:

  • Sharding 在一组计算机集群中分布存储数据。
  • 从3.4开始,MongoDB支持基于shard键创建数据区域。在平衡集群中,MongoDB仅将区域覆盖的读写定向到区域内的那些分片。有更多信息,请参见Zones手册页。

支持多种存储引擎

MongoDB支持多个存储引擎

此外,MongoDB提供 pluggable 存储引擎API,允许第三方为MongoDB开发存储引擎。


MongoDB Shell中进行查询的各种示例。

有关使用MongoDB驱动程序的示例,请参阅“其他示例”部分中的链接。

Within the shell, db refers to your current database. Type db to display the current database.

copy
copied
db

The operation should return test, which is the default database.

To switch databases, type use <db>. For example, to switch to the examples database:

copy
copied
use examples

You do not need to create the database before you switch. MongoDB creates the database when you first store data in that database (such as create the first collection in the database).

To verify that your database is now examples, type db in the shell above.

copy
copied
db


MongoDB将文档存储在集合中。集合类似于关系数据库中的表。如果不存在集合,则在您第一次为该集合存储数据时,MongoDB会创建该集合。

以下示例使用该 db.collection.insertMany()方法将新 文档插入到inventory 集合中。


copy
copied
db.inventory.insertMany([
   { item: "journal", qty: 25, status: "A", size: { h: 14, w: 21, uom: "cm" }, tags: [ "blank", "red" ] },
   { item: "notebook", qty: 50, status: "A", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank" ] },
   { item: "paper", qty: 10, status: "D", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank", "plain" ] },
   { item: "planner", qty: 0, status: "D", size: { h: 22.85, w: 30, uom: "cm" }, tags: [ "blank", "red" ] },
   { item: "postcard", qty: 45, status: "A", size: { h: 10, w: 15.25, uom: "cm" }, tags: [ "blue" ] }
]);

// MongoDB adds an _id field with an ObjectId value if the field is not present in the document

该操作返回一个包含确认指示符的文档和一个包含_id每个成功插入的文档的数组的数组 。


要从集合中选择文档,可以使用 db.collection.find()方法。要选择集合中的所有文档,请将空文档作为查询过滤器文档传递给该方法。


copy
copied
db.inventory.find({})

要格式化结果,请将追加  .pretty()到 find操作:

copy
copied
db.inventory.find({}).pretty()

NOTE

The example assumes that you have populated the inventory collection from the previous step.

对于相等匹配 (i.e. <field> equals <value>), specify <field>: <value> in the query filter document and pass to the db.collection.find() method.

NOTE

The examples assume that you have populated the inventory collection.

  • status field equals "D":

    copy
    copied
    db.inventory.find( { status: "D" } );
    
  • qty field equals 0:

    copy
    copied
    db.inventory.find( { qty: 0 } );
    
  • qty field equals 0 and status field equals "D":

    copy
    copied
    db.inventory.find( { qty: 0, status: "D" } );
    
  •  size.uom field equals "in":

    copy
    copied
    db.inventory.find( { "size.uom": "in" } )
    
  • size field equals the document { h: 14, w: 21, uom: "cm" }:

    copy
    copied
    db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
    

    嵌入式文档( embedded document) 上的相等匹配要求完全匹配,包括字段顺序。

  • tags数组匹配存在"red" 元素:

    copy
    copied
    db.inventory.find( { tags: "red" } )
    

    如果该tags字段是字符串而不是数组,则查询只是一个相等匹配。

  • tags字段与指定数组完全匹配的文档,包括顺序:

    copy
    copied
    db.inventory.find( { tags: [ "red", "blank" ] } )


要指定要返回的字段,请将投影(projection)文档传递给该 方法

db.collection.find(<query document>, <projection document>) 

  • <field>: 1 返回的文档中包含一个字段
  • <field>: 0 在返回的文档中排除字段

 _id, item, and the status fields 返回inventory集合所有文档:

copy
copied
db.inventory.find( { }, { item: 1, status: 1 } );

You do not have to specify the _id field to return the field. It returns by default. To exclude the field, set it to 0 in the projection document. For example, copy and paste the following to return only the item, and the status fields in the matching documents:

copy
copied
db.inventory.find( {}, { _id: 0, item: 1, status: 1 } );


Additional Examples

For additional examples, including MongoDB driver specific examples (Python, Java, Node.js, etc.), see:

Query document examples
Update document examples
Delete document examples


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。