我们如何确保mongoDb中的数据完整性?

rah*_*hul 10 mongodb nosql

我正在尝试从关系数据库(mysql)数据迁移到nosql(mongoDb).但是我怎样才能确保mongodb中的数据完整性.我发现我们不能在服务器端做到这一点.我应该在应用程序端使用什么来处理数据完整性?

例如:我有两个表用户和任务.两者都有userId字段常见.如果我在任务表中添加一个新条目,它应检查userid是否存在于用户表中.这是其他要求之一,如添加约束,更新值等

Ser*_*sev 8

最终,你被搞砸了.有没有办法(MongoDB中),以保证在这样的情况下数据的完整性,因为它缺乏一般,特别是外键关系.在构建应用程序级别检查方面没有什么意义.无论它们多么精细,它们仍然会失败(因此"无法保证").

所以它要么嵌入(以便相关数据始终存在于文档中),要么放弃对一致数据的希望.


Hit*_*dra 2

\n

MongoDB 不支持外键。它用于避免 JOINS。

\n
\n\n

MongoDB 不支持服务器端外键关系。但有时我们需要关联,因此 MongoDB 应用程序使用以下两种方法之一来关联文档:

\n\n
    \n
  1. 手动参考,您将一个文档的 _id 字段保存在另一文档中作为参考。然后您的应用程序可以运行第二个查询来返回相关数据。这些参考对于大多数用例来说都很简单且足够。

  2. \n
  3. DBRef是从一个文档到另一个文档的引用,使用第一个文档\xe2\x80\x99s _id 字段的值、集合名称及其数据库名称(可选)。通过包含这些名称,DBRef 允许位于多个集合中的文档更容易地与单个集合中的文档链接。这可能不会那么快,因为 DB 必须进行额外的查询来读取对象,但允许某种外键引用。尽管如此,您仍然必须手动处理您的参考文献。只有在查找 DBRef 时您才会看到它是否存在,数据库不会遍历所有文档来查找引用并在引用的目标不再存在时删除它们。但我认为删除这本书后删除所有引用将需要每个集合一个查询,仅此而已,所以实际上并不那么困难。

  4. \n
\n\n

有关详细信息,请参阅文档:数据库参考

\n\n
\n

我该如何解决这个任务?

\n
\n\n

需要明确的是,MongoDB 不是关系型的。没有标准的“范式”。您应该根据您存储的数据和要运行的查询对数据库进行建模。\n例如

\n\n
student\n{ \n  _id: ObjectId(...),\n  name: \'Jane\',\n  courses: [\n    { course: \'bio101\', mark: 85 },\n    { course: \'chem101\', mark: 89 }\n  ]\n}\n\ncourse\n{\n  _id: \'bio101\',\n  name: \'Biology 101\',\n  description: \'Introduction to biology\'\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

尝试解决这个问题

\n\n
student\n{ \n    _id: ObjectId(...),\n    name: \'Jane\',\n    courses: [\n    { \n        name: \'Biology 101\', \n        mark: 85, \n        id:bio101 \n    },\n  ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n