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

我们如何确保mongoDb中的数据完整性?,mongodb,nosql,Mongodb,Nosql,我正在尝试从关系数据库(mysql)数据迁移到nosql(mongoDb)。但如何确保mongodb中的数据完整性呢。我发现我们无法在服务器端执行此操作。我应该在应用程序端使用什么来处理数据完整性 例如:我有两个表user和task。两者都有共同的userId字段。若我在任务表中添加一个新条目,它应该检查用户表中是否存在userid。 这是其他要求之一,如添加约束、更新值等 MongoDB不支持外键。它用于避免连接 MongoDB不支持服务器端外键关系。但有时我们需要关联,因此MongoDB应用

我正在尝试从关系数据库(mysql)数据迁移到nosql(mongoDb)。但如何确保mongodb中的数据完整性呢。我发现我们无法在服务器端执行此操作。我应该在应用程序端使用什么来处理数据完整性

例如:我有两个表user和task。两者都有共同的userId字段。若我在任务表中添加一个新条目,它应该检查用户表中是否存在userid。 这是其他要求之一,如添加约束、更新值等

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

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

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

  • DBRefs是从一个文档到另一个文档的引用,使用第一个文档的_id字段的值、集合名称以及数据库名称(可选)。通过包含这些名称,DBREF允许位于多个集合中的文档更容易与单个集合中的文档链接。这可能不会太快,因为DB必须进行额外的查询以读取对象,但允许某种外键引用。但您仍必须手动处理引用。只有在查找您的DBRef时,您才会看到它是否存在,如果引用的目标不再存在,DB不会遍历所有文档来查找引用并删除它们。但我认为删除这本书后删除所有的参考文献只需要对每个收藏进行一次查询,这并不难

  • 有关更多信息,请参阅文档:

    我如何解决这个任务

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

    试着解决这个问题

    student
    { 
        _id: ObjectId(...),
        name: 'Jane',
        courses: [
        { 
            name: 'Biology 101', 
            mark: 85, 
            id:bio101 
        },
      ]
    }
    
    • MongoDb是nosql,因此没有连接
    • 数据存储为BSON文档,因此没有外键约束
    确保数据完整性的步骤:

    • 在添加任务文档之前签入应用程序,以确定其是否具有有效的用户

    最终,你完蛋了。在这种情况下,没有办法(在mongodb中)保证数据的完整性,因为它通常缺乏关系,特别是外键。构建应用程序级检查也没有什么意义。不管它们有多复杂,它们仍然可能失败(因此“没有保证”)


    因此,要么嵌入(以便相关数据始终存在,就在文档中)要么放弃一致性数据的希望。

    我不是问从RDB到nosql的数据的一致性,而是问mongoDb中的数据完整性,例如:我有两个表user和task。两者都有共同的userId字段。若我在任务表中添加一个新条目,它应该检查用户表中是否存在userid。这是一项要求,其他要求(如添加约束、更新值等)与外键和联接没有任何关系。他需要的是外键,而不是连接。@SergioTulentsev看一下用户示例(rahul)。它似乎使用了外键。@SergioTulentsev联接与此无关,但我是为它编写的user@HiteshMundra:我的意思是“你为什么提到连接?它们在这里完全不相关”问题中没有提到连接。你确定要在你的场景中使用连接吗?如果可以的话,只是做一个poc。一致的数据不是编写正确软件的要求吗?@TamasHegedus:可能是,可能不是。这与问题/答案有什么关系?
    student
    { 
        _id: ObjectId(...),
        name: 'Jane',
        courses: [
        { 
            name: 'Biology 101', 
            mark: 85, 
            id:bio101 
        },
      ]
    }