Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
如何在MongoDB中存储多对多关系_Mongodb_Many To Many_Mongodb Php - Fatal编程技术网

如何在MongoDB中存储多对多关系

如何在MongoDB中存储多对多关系,mongodb,many-to-many,mongodb-php,Mongodb,Many To Many,Mongodb Php,我想公平地说,今天下午刚安装数据库的MongoDB对我来说是个新手 我正在努力掌握存储和检索对象的方法,但正在努力找到存储具有多对多关系的对象的最佳方法 我已经访问了DBRef对象,并且已经实现了,但是这似乎只支持延迟加载的方法 有没有办法鼓励MongoDB急切地加载DBREF? 是否有更好/不同的方法来存储多对多关系 非常感谢 Rob首先,我想你需要看看,它谈论的是多对多的关系 另一件需要理解的事情是“DBRefs”的性质MongoDB数据库不提供任何连接功能 DBRef只是几年前几个库/驱动

我想公平地说,今天下午刚安装数据库的MongoDB对我来说是个新手

我正在努力掌握存储和检索对象的方法,但正在努力找到存储具有多对多关系的对象的最佳方法

我已经访问了DBRef对象,并且已经实现了,但是这似乎只支持延迟加载的方法

有没有办法鼓励MongoDB急切地加载DBREF?
是否有更好/不同的方法来存储多对多关系

非常感谢


Rob

首先,我想你需要看看,它谈论的是多对多的关系

另一件需要理解的事情是“DBRefs”的性质MongoDB数据库不提供任何连接功能

DBRef只是几年前几个库/驱动程序实现者商定的一个标准。DBRef只是一个JSON对象,使用特定的表示法,提供指向某个集合中其他文档的指针。因此,“lazy vs.eager”加载的实现完全特定于您使用的驱动程序/包装器库


也就是说,“急切加载”的概念对于MongoDB来说是毫无意义的。在SQL中,您可以通过使用某种形式的急切加载和“提前”执行联接,潜在地节省查询总量。同样,DB不支持连接,因此“急切加载”的查询数与“惰性加载”的查询数相同。

您能否更具体地说明要存储的关系类型?Mongo的文档结构是灵活的,并非所有多对多关系都必须以相同的方式表示。这里有很多不同模式的好例子:盖茨副总裁发布了一个链接,其中有一个“用户-活动-用户活动”的完美例子。在本文中,有人建议存储ID列表,存储ID是否比存储DBRef更好?我还想指出,即使是mongo文档也表示,如果知道集合将保持不变,那么手动存储ID可能更有效。就我个人而言,我不使用DBref,只存储ID,并在需要时解决它们。这引出了一个有趣的观点。这是否意味着如果MongoDB托管在与web服务器不同的机器上,那么每个文档请求都会有一个往返?我注意到执行find()操作会返回一个游标,每个文档都在迭代中被检索。@RobForrest这取决于您的实现。如果您有两个集合:A和B,并且您从A加载所有内容,那么从B加载所有内容,您可能可以在两个查询中完成此操作。然而,如果在
for
循环中执行简单的“惰性”加载,肯定会产生大量开销。因此,您可能希望同时实现“连接”和“批量连接”功能。