[mongo] 1.1 mongodb基本介绍

网友投稿 658 2022-05-29

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

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

MongoDB社区是MongoDB的可用源和免费版本。

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

文档数据库

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

使用文档的优点是:

文档(即对象)对应于许多编程语言中的本机数据类型。

嵌入式文档和数组减少了对高成本的连接需求。

动态模式支持流畅的多态性。

Collections/Views/On-Demand Materialized Views

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

除集合外,MongoDB还支持:

Read-only Views (从MongoDB 3.4开始)

On-Demand Materialized Views(从MongoDB 4.2开始)。

关键特性

高性能

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

对嵌入式数据模型(embedded data models)的支持减少了数据库系统上的I/O动作。

索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键(embedded documents and arrays)。

丰富的查询语言

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

数据汇总

文本搜索和地理空间查询。

另外:

SQL到MongoDB的映射图

SQL到聚合的映射图

了解MongoDB查询语言的最新查询语言功能:MongoDB.live 2020中   的新增 功能。

高可用性

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

自动故障转移

数据冗余。

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

水平可伸缩性

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

Sharding 在一组计算机集群中分布存储数据。

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

支持多种存储引擎

MongoDB支持多个存储引擎:

WiredTiger存储引擎(包括对静态加密Encryption at Rest的支持 )

In-Memory 存储引擎。

此外,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 . 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.  equals ), specify  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()

: 1 返回的文档中包含一个字段

: 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 Documents

Query on Embedded/Nested Documents

Query an Array

[mongo] 1.1 mongodb基本介绍

Query an Array of Embedded Documents

Project Fields to Return from Query

Query for Null or Missing Fields

Update Documents

Delete Documents

MongoDB 云数据库 GaussDB(for Mongo) 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:中秋节快到了,确定不爬点月饼送岳母娘?
下一篇:拿捏住C字符串,这个烦人程度不亚于指针的小东西
相关文章