使用以下用例构建MongoDB的最佳方法是什么?

时间:2015-11-22 22:52:42

标签: mongodb database-design database

很抱歉不得不问这个,但我是MongoDB的新手(只有相关数据库方面的经验),并且对如何构建MongoDB感到好奇。

文档将采用JSON格式,并带有以下某些字段:

{
    "url": "http://....",
    "text": "entire ad content including HTML (very long)",
    "body": "text (50-200 characters)",
    "date": "01/01/1990",
    "phone": "8001112222",
    "posting_title": "buy now"
}

某些值将是非常长的字符串。

每个文档基本上都是来自某个城市的广告。我们正在为美国许多大城市存储所有广告(约422个)。我们每天都会存储更多广告,每个城市的广告数量从0到2000不等。平均值大概在700-900左右。

我们需要在几乎即时的时间内(如果可能的话)进行以下类型的查询:

  • 获取任何特定城市的所有广告,适用于任何特定日期范围。
  • 获取针对任何城市的特定电话号码发布的所有广告。

你会推荐什么?我想我应该有422个收藏品 - 每个城市一个。我们只是在查询电话号码时担心查询时间,因为它需要遍历每个集合。我有一个包含所有集合名称的可迭代列表。

或者只是拥有一个系列会更快,以至于我不必切换到422个系列?

非常感谢大家。我在这里回答任何问题!

编辑:

这是我的#34;遍历所有集合"片段:

for name in glob.glob("Data\Nov. 12 - 5pm\*"):
    val = name.split("5pm")[1].split(".json")[0][1:]
    coll = db[val]

    # Add into collection here...

2 个答案:

答案 0 :(得分:0)

MongoDB不提供任何从多个集合中获取结果的操作,因此在这种情况下不建议将数据放在多个集合中。

通过为他们创建indexes,您可以大大加快您提到的所有用例。当您拥有一个非常大的数据集并始终查询完全相等时,hashed indexes是最快的。

当您查询一系列日期(第x天和第y天之间)时,您应该使用the Date type而不是字符串,因为这不仅可以让您使用大量方便的date operators in aggregation而且还允许您可以使用升序或降序索引来加速远程查询和排序。

答案 1 :(得分:0)

也许我错过了一些东西,但不会制造" city" JSON中的字段可以解决您的问题吗?这样你只需要做这样的事情db.posts.find({ city: {$in: ['Boston', 'Michigan']}})