gpt4 book ai didi

mongodb - 是否可以在 MongoDB 数据库中的对象之间建立关系?

转载 作者:IT老高 更新时间:2023-10-28 13:11:37 29 4
gpt4 key购买 nike

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

但是,我被要求在集合之间建立与 MongoDB 的关系。这违背了 NoSQL 概念对我来说的目的,但作为该领域的老菜鸟,我来征求其他意见。

例如,如果我们采用常见的角色/用户关系,是否可以有一个名为“角色”的引用集合并将一个项目的引用归因于一个用户项目?

我开始考虑创建一个对象,为所请求的对象提供一个 ID,但感觉就像我不应该与 NoSQL 有任何关系。

那么这里有人被要求做同样的事情吗?你成功了吗?如何成功?

最佳答案

MongoDB(和大多数其他 NoSQL 数据库)本身并不支持关系的概念。 RDBMS 具有本地查询工具来定义和利用 MongoDB 缺乏的关系(例如 JOIN)。

这并不意味着您不能在 NoSQL 数据库中定义关系/引用。这只是意味着没有本地查询运算符可以感知关系。

在 MongoDB 中有三种不同的方式可以从另一个文档中“引用”一个文档:

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

  2. 第二种方法是使用 DBRef 约定,它以正式的方式定义对文档的引用:{ $ref : <collname>, $id : <idvalue>[, $db : <dbname>] } .在几乎所有情况下,首选第一种方法,但 DBRef 确实允许引用应用程序可能不知道其类型或位置的文档。更多信息在这里:http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef并在此处阅读有关何时使用它们的好书:http://valyagolev.net/article/mongo_dbref/

  3. 在技术上不是引用,但在很多情况下,将文档(部分)嵌入到其他文档中是有意义的。请注意,对于 NoSQL 数据库,您的模式的规范化应该较少关注。 Example : {_id: ObjectId(...); user: {_id: ObjectId(...), name:"Willy Wonka"}} .

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

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

关于mongodb - 是否可以在 MongoDB 数据库中的对象之间建立关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6994313/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com