我们有一个事件日历,这就是我对基本mongo架构的想法:
用户
事件
场地
将要完成的查询是:
关于我们是否应该在事件中嵌套场地或使用mysql的任何反馈/想法?
答案 0 :(得分:4)
好的,看起来很不错。让我们构建一些查询。
假设这些馆藏被命名为用户,活动,场地:
插入一些虚拟事件:
db.events.insert({标签:[ “真棒”, “娱乐”, “酷”]})
db.events.insert({标签:[ “甜”, “有趣”, “拉德”]})
制作索引(就像老板一样)
db.events.ensureIndex({tags:1})
列出不同的标签(根据当前设计,这可能很难):
不,不是很难。
db.events.distinct( “标签”)
[“awesome”,“cool”,“fun”,“rad”,“sweet”]
给定标记中的事件(您的意思是“带有给定标记”对吗?)
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,可以自动完成部分内容。
祝你好运!