MongoDB 2.6.0:基本插入

时间:2014-04-23 02:39:08

标签: mongodb mongodb-query relational-database database nosql

我有关系数据库的工作经验,最近我开始学习MongoDB。我有一个基本问题:

假设我想在表/集合中插入行/文档。我能看到的是:

对于关系数据库:

如果insert查询包含table中不存在的列,则插入失败并抛出错误。

对于MongoDB

db.<CollectionName>.insert({"Key 1":"value 1", .... , "Key N":"value N"})

对于不同的Key,在Field中创建了新的Document。因此,我们对Field权利Collection的数量没有任何限制(与关系数据库不同) - 为什么?

1)从关系数据库的角度来看,这不应该有效。如果开发人员错误(拼写错误)插入具有不同密钥名称的记录,该怎么办?这会不必要地创建额外的Field权利吗?

2)如何限制这一点,以便只能在Field中插入一些特定的Document(不确定这是否是使用MongoDB的正确方法)?

请澄清,我在第一个学习日相当困惑。

1 个答案:

答案 0 :(得分:1)

MongoDB中不相同的键名不匹配。如果两个文档包含不同顺序的相同键/值对,则它们不匹配。 MongoDB在设计上是无模式的。它提高了从磁盘插入和获取整个文档的速度。 MongoDB通过保存复杂和耗时的操作(如事务,数据验证等)来获得性能和可伸缩性。节省的成本基本上转嫁给开发人员(和最终用户),但是如果您考虑SQL / RDBMS在现实世界中的工作方式,应用程序开发人员无论如何都必须进行各种验证。

至于你关于拼写错误的问题:你怎么能把一个拼写错误引入密钥?你的代码是由人类动态生成的吗?一旦编译完成,它就会一直运行,直到你或其他人修改它为止。当(如果有的话)你开始看到不一致时,你可以很容易地修改那些有错别字的文档。 Mongo甚至为此目的进行了背景更新。

虽然MongoDB是无模式的,但您的代码仍然会强制执行事实上的模式。但我想,你的焦虑是没有必要的。 Mongo有一个非常灵活和强大的聚合框架,可以轻松(快速)地搜索和聚合文档。


编辑1:每个文档限制为16MB,因此您无法永久添加密钥。认为应该提到。