【问题标题】:How to convert many-to-many relation form SQL to mongoDB colllection?如何将多对多关系从 SQL 转换为 mongoDB 集合?
【发布时间】:2012-02-28 18:59:47
【问题描述】:

我在 SQL 中有 3 个具有多对多关系的表。第一个表“帐户”有 3 个字段(帐户 ID、用户名、电子邮件)。第二个表“设备”有 2 个字段(设备 ID 和设备代码)和表“Association”有 4 个字段(AccountId、DeviceId、LastActivityDate、HasException)

如何将它们转换为 mongoDB。 根据 mongodb.org 的建议,我将集合“Associaton”嵌入到设备集合和帐户集合中,但是每次我的系统有新交易时,“LastAccessDate”字段总是更新。

-帐户收集: {

"用户名" : "xxx", “电子邮件”:1,

“关联”:[{ “设备 ID”:“4f45c4b73174ec818148d5c5”, "LastActivityDate" : "2012 年 2 月 23 日星期四 11:44:19 GMT +07:00", “有异常”:假 }, { “设备标识符”:对象标识符(“4f45c5e93174ec818148d5c7”), "LastActivityDate" : "2012 年 2 月 23 日星期四 11:52:05 GMT +07:00", “例外”:空 }] }

设备集合: {

"设备代码" : "abcjxhcbxkjcnxkcjhdiofjdojdlkdknd", “协会”:[{ "AccountId" : "34fdgfdy5676", "LastActivityDate" : "02/03/2012", “有异常”:假 }, { "AccountId" : "34fdgfdy5dd676", "LastActivityDate" : "02/03/2012", “有异常”:真 }],

}

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    我看到您的问题有多种解决方案:

    很少更新

    为了避免在 NoSQL 数据库中必须在客户端完成的连接,请将所有内容放在一个集合中。如果你不经常更新,你可以这样做

    {
       _id,
       LastAccessDate,
       HasException,
       Account : {
            AccountID,
            UserName,
            Email },
       Device : {
            DeviceID,
            DeviceCode }
    }
    

    这会导致重复数据,但如果性能(无连接)优先于内存效率,那么它可能是适合您的解决方案。由于数据被多次存储,更新对服务器的要求更高。 IE。更新电子邮件地址如下所示

    db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "new@email.com"} });
    

    由于您不再需要 AccountID 和 DeviceID 加入,您也可以删除这两个字段。

    经常更新

    当您有频繁更新时,您可以使用引用而不是嵌入。我认为您必须在客户端解决它们。然后你就有了三个集合:

    帐号:

    {
      _id,
      UserName,
      Email
    }
    

    设备:

    {
      _id,
      DeviceCode
    }
    

    协会:

    {
      _id,
      account : {
            "$ref" : "Account",
            "$id" : ... }
      device : {
            "$ref" : "Device",
            "$id" : ... }
    }
    

    这样你没有任何重复,但你必须处理引用。

    【讨论】:

      猜你喜欢
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多