2011-11-22 43 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来完成。

祝你好运!