簡體   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