繁体   English   中英

如何将多对多关系从SQL转换为mongoDB colllection?

[英]How to convert many-to-many relation form SQL to mongoDB colllection?

我在SQL中有3个具有多对多关系的表。第一个表“account”有3个字段(AccountId,UserName,Email)。第二个表“device”有2个字段(DeviceId和DeviceCode)和表“Association” “有4个字段(AccountId,DeviceId,LastActivityDate,HasException)

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

- 帐户集合:{

“UserName”:“xxx”,“电子邮件”:1,

“Association”:[{“DeviceId”:“4f45c4b73174ec818148d5c5”,“LastActivityDate”:“星期四,2012年2月23日11:44:19 GMT +07:00”,“HasException”:false},{“DeviceId”:ObjectId( “4f45c5e93174ec818148d5c7”),“LastActivityDate”:“星期四,2012年2月23日11:52:05 GMT +07:00”,“例外”:null}]}

设备集合:{

“DeviceCode”:“abcjxhcbxkjcnxkcjhdiofjdojdlkdknd”,“Associations”:[{“AccountId”:“34fdgfdy5676”,“LastActivityDate”:“02/03/2012”,“HasException”:false},{“AccountId”:“34fdgfdy5dd676”, “LastActivityDate”:“02/03/2012”,“HasException”:true}],

}

我看到了多种解决方案:

很少更新

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

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

这会导致重复数据,但如果性能(无连接)出现在内存效率之前,它可能是适合您的解决方案。 由于数据存储多次,因此对服务器的更新要求更高。 即更新电子邮件地址看起来像

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" : ... }
}

你没有这种方式的重复,但你必须处理引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM