MongoDB支持哪些平台?
有关支持的平台列表,请参阅[支持的平台]。
MongoDB集合与数据库中的表有何不同?
MongoDB数据库将其数据存储在集合中,而不是表。 集合包含一个或多个BSON文档。 文档类似于关系数据库表中的记录或行。 每个文档都有一个或多个字段; 字段类似于关系数据库表中的列。
如何创建数据库和集合?
如果数据库不存在,MongoDB会在你第一次存储该数据库的数据时创建数据库。
如果集合不存在,MongoDB会在你第一次存储该集合的数据时创建集合。
因此,您可以切换到不存在的数据库(使用)并执行以下操作:
use myNewDB
db.myNewCollection1.insertOne( { x: 1 } )
db.myNewCollection2.createIndex( { a: 1 } )
插入操作会创建数据库myNewDB和集合myNewCollection1(如果它们不存在)。
createIndex操作在创建myNewDB之后发生,如果集合不存在,则创建索引和集合myNewCollection2。 如果myNewDb不存在,createIndex操作也会创建myNewDB。
如果要指定特定选项(如最大大小或文档验证规则),还可以使用db.createCollection显式地创建集合。
如何定义或更改集合的schema?
你不需要在MongoDB中为集合指定schema。虽然集合中的文档通常具有基本上同质的结构,但这不是必需的;即,单个集合中的文档不需要具有相同的字段集。字段的数据类型也可以在集合中的文档之间不同。
要更改集合中文档的结构,请将文档更新为新结构。例如,添加新字段,删除现有字段或将字段值更新为新类型。
但是,从MongoDB 3.2开始,您可以在更新和插入操作期间强制执行集合的文档验证规则。
某些集合属性(例如指定最大大小)可以在显式创建集合期间指定并进行修改。请参见db.createCollection和collMod。如果未指定这些属性,则无需显式创建集合,因为MongoDB在首次存储集合数据时会创建新集合。
MongoDB是否支持SQL?
不能直接支持,或者说并不支持。 但是,MongoDB确实支持自己的丰富查询语言。 有关使用MongoDB查询语言的示例,请参阅MongoDB CRUD操作
您还可以使用MongoDB Connector for BI来使用SQL查询MongoDB集合。
MongoDB是否支持事务?
因为单个文档可以包含相关数据,否则这些相关数据将在关系模式中的单独父子表中建模,MongoDB的原子单文档操作已经提供了满足大多数应用程序的数据完整性需求的事务语义。 可以在单个操作中写入一个或多个字段,包括对多个子文档和阵列元素的更新。 MongoDB提供的保证确保在文档更新时完全隔离; 任何错误都会导致操作回滚,以便客户端收到文档的一致视图。
从版本4.0开始,对于需要原子性来更新多个文档或读取多个文档之间的一致性的情况,MongoDB为副本集提供多文档事务,并为MongoDB 4.2安排分片集群的事务。
在大多数情况下,多文档事务比单个文档写入产生更高的性能成本,并且多文档事务的可用性不应该取代有效的模式设计。 对于许多场景,非规范化数据模型(嵌入式文档和数组)将继续为您的数据和用例提供最佳选择。 也就是说,对于许多场景,适当地建模数据将最大限度地减少对多文档事务的需求。
MongoDB是否能处理缓存?
是的。 MongoDB将最近使用的数据保存在RAM中。 如果你为查询创建了索引,并且你的工作数据集适合RAM,则MongoDB将从内存中提供所有查询。
MongoDB并不会缓存查询结果。