【问题标题】:Mongo DB Design For Events CalendarMongodb 活动日历设计
【发布时间】:2011-11-23 05:16:30
【问题描述】:

我们有一个活动日历,这是我对基本 mongo 架构的想法:

用户

  • 用户名
  • 密码

事件

  • 姓名
  • 说明
  • 标签[]
  • 类别
  • venue_id ...

场地

  • 姓名
  • 地址
  • 位置

将要完成的查询是:

  • 不同标签的列表(考虑到当前的设计,这可能很难)
  • 给定标签中的事件
  • 活动信息以及场地位置
  • 特定活动的所有活动和场地信息
  • 我附近的所有活动。需要在 loc 上使用地理索引

关于我们是否应该在活动中嵌套场地或使用 mysql 是否有任何反馈/想法?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    好的,看起来不错。让我们构建一些查询。

    假设集合是命名的用户、事件、场所:

    • 插入一些虚拟事件

      db.events.insert({tags:["awesome","fun","cool"]})

      db.events.insert({tags:["sweet","fun","rad"]})

    • 制作索引(像老板一样)

      db.events.ensureIndex({ tags: 1 })

    • 不同标签的列表(考虑到当前的设计,这可能很难)

      不,不难。

      db.events.distinct("标签")

      [“真棒”、“酷”、“有趣”、“rad”、“甜蜜”]

    • 给定标签中的事件(您的意思是“使用给定标签”对吗?)

      db.events.find({tags: "fun"})

      { "_id" : ObjectId("4ecc08c62477605df6522c97"), "tags" : [ "awesome", "fun", "cool" ] }

      { "_id" : ObjectId("4ecc08d92477605df6522c98"), "tags" : [ "sweet", "fun", "rad" ] }

    • 活动信息以及场地位置

      您可以通过几种不同的方式来做到这一点。一种方法是查询事件并随后查询场地。使用这两个文档,手动加入(组合)您想要的数据。

      您可以稍微反规范化并存储缓存的场地名称 + 位置(但不存储场地详细信息,如营业时间、最大入住人数、网站、电话号码等)以提高速度(1 个查询而不是 2 个)该方法附带无法在一处更新数据的标准非规范化警告。

    • 特定活动的所有活动和场地信息

      见上

    • 我附近的所有活动。需要在 loc 上使用地理索引

      又是两个查询,与上面的概念相同,只是颠倒了顺序。

      获取场地:

      db.venues.find( { loc : { $near : [lat,lon] } } )

      使用场地 ID 获取事件:

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

    如果您使用 ODM,其中一些内容可以自动为您完成。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多