2011-11-22 69 views
3

我們有一個活動日程表,這裏是什麼,我想我們的基本蒙戈架構:蒙戈DB設計活動日曆

用戶

  • 用戶名
  • 密碼

事件

  • 描述
  • 標籤[]
  • 類別
  • venue_id ...

場館

  • 地址
  • 祿

查詢將要完成的是:

  • 不同標籤的列表(這可能是很難給出當前設計)在給定的標籤
  • 事件
  • 事件信息連同場地位置
  • 特定活動的所有活動和場地信息
  • 我附近的所有活動。需要在loc上使用地理位置索引

如果我們應該在事件中嵌套場地或使用mysql,那麼是否有任何反饋/想法?

回答

4

好的,這看起來不錯。我們來構建一些查詢。

假設集合命名的用戶,事件,地點:

  • 插入一些虛擬事件

    db.events.insert({標籤: 「真棒」,」有趣的」, 「酷」]})

    db.events.insert({標籤:[ 「甜」, 「有趣」, 「拉德」]})

  • 製作索引(像老闆)

    db.events。ensureIndex({標籤:1})

  • 上市不同的標籤(這可能是很難給出當前設計)

    不,不是很難。

    db.events.distinct( 「標籤」)

    [ 「真棒」, 「爽」, 「好玩」, 「拉德」, 「甜蜜蜜」]

  • 活動在給定的標籤(你的意思是 「給定的標籤」 吧?)

    db.events.find({標籤: 「好玩」})

    { 「_id」:的ObjectId( 「4ecc08c62477605df6522c97」), 「標籤」:[ 「真棒」, 「娛樂」, 「酷」]}

    { 「_id」:的ObjectId( 「4ecc08d92477605df6522c98」),「標籤」:‘甜’,‘好玩’,‘拉德’]}

  • 事件信息與場地位置沿

    你可以這樣做幾種不同的方法。一種方法是查詢事件並隨後查詢場地。使用這兩個文檔,手動加入(組合)您想要的數據。

    OR

    可以用於非規範化的速度提升了一下,存儲緩存場所名稱+位置(但不詳細地點,如營業時間,最大佔用,網站,電話號碼等。)( 1查詢而不是2)該方法帶有標準的非規範化警告,無法在一個地方更新數據。

  • 特定事件的所有事件和地點信息

    見上面

  • 靠近我的所有事件。需要在loc上使用地理索引

    再次查詢兩次,與上面相同的概念只是顛倒了順序。

    獲取場館:

    db.venues.find({LOC:{$附近:[緯度,經度]}})

    使用場地IDS獲取事件:

    db.events.find({地點:{$ in:[id1,id2,id3 ...]}})

一些這方面的東西可以自動爲你,如果你使用ODM來完成。

祝你好運!