Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails MongoDB是非关系型的,但MongoGem是关系型的_Ruby On Rails_Ruby_Mongodb - Fatal编程技术网

Ruby on rails MongoDB是非关系型的,但MongoGem是关系型的

Ruby on rails MongoDB是非关系型的,但MongoGem是关系型的,ruby-on-rails,ruby,mongodb,Ruby On Rails,Ruby,Mongodb,所以我有一个简单的问题。我想向自己澄清这一点: 根据文档,MongoDB是一个非关系数据库。然而,gemformongo可以建立关系模型 所以,问题是它的gem实现允许以标准AR方式查询数据库吗 欢迎任何解释。让我们明确一点。MongoDB内部不以任何方式进行连接。不能这样做,因为这违反了一般设计的原则。至少现在是这样。因此,当我们谈论关系数据库时,它们在服务器上进行内部联接 您的特定库(无论它是什么或以其他方式称为ODM对象文档映射器)所做的是在运行代码的客户端上模拟连接,但这不是实际的连接

所以我有一个简单的问题。我想向自己澄清这一点:

根据文档,MongoDB是一个非关系数据库。然而,gemformongo可以建立关系模型

所以,问题是它的gem实现允许以标准AR方式查询数据库吗


欢迎任何解释。

让我们明确一点。MongoDB内部不以任何方式进行连接。不能这样做,因为这违反了一般设计的原则。至少现在是这样。因此,当我们谈论关系数据库时,它们在服务器上进行内部联接

您的特定库(无论它是什么或以其他方式称为ODM对象文档映射器)所做的是在运行代码的客户端上模拟连接,但这不是实际的连接

因此,这允许您执行以下操作:

获取一个项目,然后获取它在其他集合中存在的所有相关项目

使MongoDB术语中实际上是嵌入式文档的内容与关系数据存储中的外部关系一样

因此,在1的情况下,客户机代码中实际发生的情况是,在检索主控文档时,会向数据库发出一个或多个请求,以获取相关文档。这通常作为一个或另一个文档集合来完成,该文档集合包含所有子文档或父文档的相关关键信息,以便可以引用结果

这种明显的连接实际上发生在客户端,而不是服务器端

这里的限制是,通常限制您不能基于子文档中的内容筛选父文档结果。这可能因实现而异,但存储对其所有子级的引用的任何父级都有该限制,例如

另一方面,与2的情况一样,由于文档实际上彼此嵌入,因此只有一个对数据库的请求才能检索文档及其所有相关条目。事实上,这是将MongoDB用于存储的主要设计要点和优势之一,因为这种情况适合您的需要

在这种情况下,数据已经预连接,因此不需要执行任何连接,所有读取和写入都可以通过原子方式完成


无论如何,这应该成为基本区别的基础。解释非关系型和其他NoSQL存储为何存在于替代关系型SQL存储之上的各个方面,在这里要回答的主题远远不够广泛。网络上有大量的阅读资料。

mongo gem有可能是指mongoid gem吗?你说的是哪一种gem,它是如何使模型关系化的,以及允许以标准AR方式查询数据库是什么意思?我怀疑这个gem可以让您进行连接,但是使用MongoDB实现where并不困难。非关系意味着没有连接。然而,mongo允许存储对其他文档的引用ID,因此mongo gems mongoid例如允许查询这些引用并获取它们的数据,但这本身并不意味着它是关系型的