当前位置:  开发笔记 > 编程语言 > 正文

是否有可能在MongoDB数据库中的对象之间建立关系?

如何解决《是否有可能在MongoDB数据库中的对象之间建立关系?》经验,为你挑选了1个好方法。

这些天我在工作中使用MongoDB.到目前为止,我觉得这是一次很棒的体验.

但是我被要求用MongoDB建立集合之间的关系.这违背了NoSQL概念的目的,但在这个领域成为一个好老的菜鸟,我来找其他意见.

例如,如果我们采用共同的角色/用户关系,是否可以拥有一个名为"Roles"的引用集合并将一个项目的引用归属于User项目?

我开始考虑创建一个为所请求的对象提供ID的对象,但感觉就像我不应该对NoSQL做的事情.

那么有没有人要求做同样的事情?你成功了,怎么样?



1> Remon van Vl..:

MongoDB(以及大多数其他NoSQL数据库)本身不支持关系概念.RDBMS具有本机查询工具,用于定义和利用MongoDB缺少的关系(例如,JOIN).

这并不意味着您无法在NoSQL数据库中定义关系/引用.它只是意味着没有可识别关系的本机查询运算符.

在MongoDB中有三种不同的方式从一个文档"引用":

    将引用文档的ID(通常是ObjectId)存储为引用文档中的字段.如果您的应用程序知道必须查找引用文档的集合,这是最佳方法.Example : {_id: ObjectId(...); userId: ObjectId(...) <- reference).

    第二种方法是使用DBRef约定,它以正式的方式定义对文档的引用:{ $ref : , $id : [, $db : ] }.在几乎所有情况下,第一种方法都是首选,但DBRef确实允许引用文档,应用程序可能不知道其类型或位置.这里Furhter信息:http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef就当在这里使用它们很好看的:http://valyagolev.net/article/mongo_dbref/

    从技术上讲,这不是一个参考,但在很多情况下,将(部分)文档嵌入到其他文档中是有意义的.请注意,使用NoSQL数据库时,模式的规范化应该不那么重要.Example : {_id: ObjectId(...); user: {_id: ObjectId(...), name:"Willy Wonka"}}.

总而言之,您可以在MongoDB中使用完全规范化的模式,并且大多数ORM库将为您做很多非MongoDB原生的工作.在大多数情况下,这确实意味着您最好使用传统的RDBMS.如果您正在切换到MongoDB,因为您认为它是MySQL的快速版本,那么您就会被误导.两者都有功能性甜点,只有有限的重叠.如果您的应用程序严重依赖关系功能,请不要使用NoSQL.

其他值得阅读的文章可以帮助您快速了解非关系思维:http: //www.mongodb.org/display/DOCS/Schema+Design

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有