常见问题:MongoDB基础知识

·MongoDB支持哪些平台?

·MongoDB作为托管服务提供吗?

·集合(collection)与表(table)有何不同?

·如何创建数据库(database)和集合(collection)?

·如何定义或修改集合模式(schema)?

·MongoDB是否支持SQL?

·MongoDB是否支持事务?

·MongoDB是否处理缓存?

·MongoDB如何解决SQL或Query注入问题?

本文档回答有关MongoDB的一些常见问题。

MongoDB支持哪些平台?

有关支持的平台列表,请参阅 支持的平台。

MongoDB作为托管服务提供吗?

是的。MongoDB Atlas是一种云托管的数据库即服务。有关更多信息,请访问MongoDB Atlas文档。

集合(collection)与表(table)有何不同?

MongoDB数据库将其数据存储在集合(collection)中,而不是表(table)。集合包含一个或多个 BSON文档。文档类似于关系数据库表中的记录或行。每个文档都有一个或多个字段 ; 字段类似于关系数据库表中的列。
也可以看看:
SQL到MongoDB映射图, MongoDB简介

如何创建数据库(database)和集合(collection)?

如果数据库不存在,MongoDB会在您第一次存储该数据库的数据时创建数据库。
如果集合不存在,MongoDB会在您第一次存储该集合的数据时创建集合。[1]

因此,您可以切换到一个不存在的数据库(use )并执行以下操作:

use myNewDB
db.myNewCollection1.insertOne( { x: 1 } )
db.myNewCollection2.createIndex( { a: 1 } )

如果数据库myNewDB和集合myNewCollection1尚不存在,insert操作将创建它们。

发生在myNewDB库创建之后的createIndex操作,将创建索引,并且如果集合不存在的话同时也会创建myNewCollection2集合。如果myNewDb库不存在的话,createIndex操作也将创建myNewDB数据库。

[1] 如果要指定特定的集合选项,你也可以明确的使用db.createCollection来创建一个集合,例如指定最大大小或文档验证规则。

如何定义或修改集合模式(schema)?

在MongoDB中您不需要为集合指定模式。虽然集合中的文档通常具有基本上同质的结构,但这不是必需的; 即,单个集合中的文档不需要具有一组相同的字段。字段的数据类型也可以在集合中的文档之间存在不同。

要更改集合中文档的结构,请将文档更新为新结构。例如,添加新字段,删除现有字段或将字段值更新为新类型。

在3.2版中更改:但是,从MongoDB 3.2开始,您可以在更新和插入操作期间强制执行集合的文档验证规则。

某些集合属性(例如指定最大大小)可以在显式创建集合期间指定并进行修改。见db.createCollection和collMod。如果未指定这些属性,则无需显式创建集合,因为MongoDB在首次存储集合数据时会创建新集合。

MongoDB是否支持SQL?

不直接支持。但是,MongoDB自身确实支持丰富的查询语言。有关使用MongoDB查询语言的示例,请参阅MongoDB CRUD操作

您还可以使用MongoDB Connector for BI来使用SQL查询MongoDB集合。

也可以看看:
SQL到MongoDB映射图表

MongoDB是否支持事务?

因为单个文档可以包含相关数据,否则这些相关数据将在关系模式中的单独父子表中建模,MongoDB的单文档原子操作已经提供了满足大多数应用程序的数据完整性需求的事务语义。可以在单个操作中写入一个或多个字段,包括对多个子文档和数组元素的更新。MongoDB提供的保证确保文档更新是完全隔离的; 任何错误都会导致操作回滚,以便客户端收到文档的一致视图。

从版本4.0开始,对于需要原子性来更新多个文档或读取多个文档之间的一致性的情况,MongoDB 为副本集提供多文档事务,并计划在MongoDB 4.2为分片集群提供事务支持。

重要:
在大多数情况下,多文档事务比单个文档写入产生更高的性能成本,并且多文档事务的可用性不应该取代高效的模式设计。对于许多场景, 非范式数据模型(嵌入式文档和数组)将继续为您的数据和用例提供最佳选择。也就是说,对于许多场景,适当地对数据建模将最大限度地减少对多文档事务的需求。

[2] 我们产品所描述的任何特性或功能的开发,发布和时间由我们自行决定。此信息仅用于概述我们的一般产品方向,不应依赖这些做出购买决定,也不是承诺,保证或法律义务的提供任何材料,代码或功能。

MongoDB是否处理缓存?

是。MongoDB将最近使用的数据保存在内存中。如果您为查询创建了索引,并且您的工作数据集适合内存大小,则MongoDB将从内存中进行查询。

MongoDB不会缓存查询结果,以便为相同查询返回缓存结果。

有关MongoDB和内存使用的更多信息,请参阅WiredTiger和内存使用以及MMAPv1和内存使用。

MongoDB如何解决SQL或Query注入问题?

BSON 
当客户端程序在MongoDB中组合一个查询时,它会构建一个BSON对象,而不是一个字符串。因此传统的SQL注入攻击并不是问题。更多细节和一些细微差别如下。

MongoDB将查询表示为BSON对象。通常, 客户端驱动库提供了一个方便,无注入的过程来构建这些对象。考虑以下C ++示例:

BSONObj  my_query  =  BSON ( “name”  <<  a_name  );
auto_ptr < DBClientCursor > cursor = c.query (“tutorial.persons” , my_query );

示例中,my_query的值可能是例如{name:”Joe”}。如果包含特殊字符,例如 ,:和{,查询根本不会匹配上任何文档。例如,用户无法劫持查询并将其转换为删除。

JavaScript
注意:

您可以通过在命令行上传递–noscripting选项或在配置文件中设置security.javascriptEnabled来禁用JavaScript的所有服务器端执行功能 。

所有以下MongoDB操作都允许您直接在服务器上运行任意JavaScript表达式:
·$where
·mapReduce
·group
在这些情况下,您必须小心谨慎,以防止用户提交恶意JavaScript。

幸运的是,您可以在没有JavaScript的MongoDB中表达大多数查询,对于需要JavaScript的查询,您可以在单个查询中混合使用JavaScript和非JavaScript。将所有用户提供的字段直接放在BSON字段中,并将JavaScript代码传递给该$where字段。

如果需要在$where子句中传递用户提供的值,则可以使用CodeWScope机制转义这些值。当在作用域文档中将用户提交的值设置为变量时,可以避免在数据库服务器上执行它们。

译者:钟秋

原文链接:https://docs.mongodb.com/manual/faq/fundamentals/

常见问题:MongoDB基础知识的更多相关文章

  1. MongoDB基础知识 02

    MongoDB基础知识 02 6 数据类型 6.1 null : 表示空值或者不存在的字段 {"x":null} 6.2 布尔型 : 布尔类型只有两个值true和false {&q ...

  2. MongoDB基础知识 01

    MongoDB基础知识  1. 文档  文档是MongoDB中的数据的基本单元,类似于关系型数据库管理系统的行. 文档是键值对的一个有序集.通常包含一个或者多个键值对. 例如: {”greeting& ...

  3. DataBase MongoDB基础知识记录

    MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...

  4. Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB

    MongoDB 简介 1. 易于使用:没有固定的模式,根据需要添加和删除字段更加容易 2. 易于扩展:MongoDB的设计采用横向扩展.面向文档的数据模型使它能很容易的再多台服务器之间进行分割.自动处 ...

  5. MongoDB基础知识记录

    MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...

  6. MongoDB 基础知识

    一. 基础知识 1. MongoDB是一个文档型的数据库,文档就是一个键值对的有序集合. 例如这样:{"greeting":"hello world"} 2. ...

  7. MongoDB基础知识(二)

    一.基本概念 1:文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行 2:集合(collection)可以看做是一个拥有动态模式(dynamic schem ...

  8. MongoDB基础知识

    一.Mongodb简介 Mongodb是基于分布式文件存储的数据库,用C++编写: Mongodb是nosql(not-only-sql)数据库: Mongodb '无状态模式',不用去设计,直接用, ...

  9. Mongodb基础知识----Mongodb权威指南阅读

    文档是Mongodb中数据的基本单元,类型关系型数据库中的行,每个文档都有一个键值唯一的键_id.集合可以看做拥有动态模式的表. Mongodb一个实例可以拥有多个相互独立的数据库. Mongodb区 ...

随机推荐

  1. JS流程控制语句 来来回回(Do...while循环) 先执行后判断 do while结构的基本原理和while结构是基本相同的,但是它保证循环体至少被执行一次。

    来来回回(Do...while循环) do while结构的基本原理和while结构是基本相同的,但是它保证循环体至少被执行一次.因为它是先执行代码,后判断条件,如果条件为真,继续循环. do...w ...

  2. error in ./src/pages/login.vue?vue&type=style&index=0&lang=less&

    vue-cli3创建less工程,npm run serve 无法运行 bug解决方法: rm -rf node-modules 修改package.json为 "less": & ...

  3. WPF 免费控件库(2)

    最近在逛园子的时候发现的园友分享或提及的WPF控件库~ (1) Bootstrap WPF Style,Bootstrap风格的WPF样式 转:http://www.cnblogs.com/tsliw ...

  4. Apache Flink 进阶(一):Runtime 核心机制剖析

    1. 综述 本文主要介绍 Flink Runtime 的作业执行的核心机制.首先介绍 Flink Runtime 的整体架构以及 Job 的基本执行流程,然后介绍在这个过程,Flink 是怎么进行资源 ...

  5. 「题解」:[BZOJ4558]方

    问题: 方 时间限制: 2 Sec  内存限制: 256 MB 题面 题目描述 上帝说,不要圆,要方,于是便有了这道题.由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形 上帝把我们派到了一 ...

  6. 解决无法wifi上网的问题

    1.查看网卡型号 lspci | grep Network 可以看到我的是Wireless-AC 9560 2.登录Inter官网下载网卡驱动 https://www.intel.com/conten ...

  7. vue如何关闭sourceMap

    Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1,运行  cnpm run build  开始 ...

  8. MyEclipse使用总结——将原有的MyEclipse中的项目转成maven项目[转]

    前面一篇文章中我们了解了 在myeclipse中新建Maven框架的web项目 那么如果我们原来有一些项目现在想转成maven项目应该怎么做呢 我收集到了三种思路: 一.新建一个maven项目,把原项 ...

  9. apache netbeans不再集成tomcat

    老版本 8.2之前的,集成tomcat,安装使用比较简单https://netbeans.org/features/index.html 新版本的阿帕奇netbeans,则不集成tomcat,使用时, ...

  10. 05_springmvc参数绑定

    一.参数绑定的过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上.springmvc中,接收页面提交的数据是通过方法形参来接收.而不 ...