搜尋

首頁  >  問答  >  主體

mongoose - 關於mongodb的建模,有人建議我 把 「商品」的「品牌名稱」 從ObjectId 轉為 string,這樣好嗎?

他說這樣比較方便查詢,是呀,傻子也知道這樣方便查詢。我質疑說這樣儲存時會不好,但他說有shortId什麼的,求解答!

天蓬老师天蓬老师2761 天前653

全部回覆(1)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-04-25 09:04:36

    這個要具體業務具體分析了。
    如果把品牌名稱設定成 ObjectId 的话,就说明有另外一个 collection 存放著品牌。這麼做是典型的關係型資料庫的方式,對 mongodb 來說,每次要獲得商品的品牌名,就要多一次讀操作。

    如果設定成String ,一次操作即可取出全部商品資訊和品牌名,但修改品牌的時候卻非常麻煩,如果在一次請求中還要獲得品牌的一些信息,比如品牌所在的國家,那麼還是要再做一次查詢,擴充性不夠好。

    如果設定成 Object 如:

    javascript{
        item:"",
        price:100,
        brand:{
            name: "micorsoft",
            country: "US"
        }
    }
    

    這麼做可以解決擴展性的問題,而且查詢速度也很快,如果商品品牌資訊不怎麼更新的話,那麼我建議這麼做。雖然增加了資料冗餘程度,但是提高了查詢速度,這就是反範式。

    如果品牌資訊經常更新的話,那麼用 ObjectId 還是好的,雖然多了一次查詢,但是提高了可靠性。

    回覆
    0
  • 取消回覆