如何为Twitter文章聚合器设计MongoDB模式

如何为Twitter文章聚合器设计MongoDB模式,mongodb,schema,Mongodb,Schema,我是MongoDB的新手,作为练习,我正在构建一个从推文中提取链接的应用程序。这样做的目的是为一个主题获取最多的推特文章。我很难为这个应用程序设计模式 应用程序将捕获tweet并保存它们 tweet被解析为链接 链接与其他信息(标题、摘录等)一起保存 tweet可以包含多个链接 一个链接可以有很多tweet 我如何: 是否保存这些集合、嵌入的文档 按推文数量排列前十名链接 获取特定日期推文最多的链接 获取链接的推文 获取最新的十条推文 我很想得到一些关于这方面的信息。两个一般提示: 1)

我是MongoDB的新手,作为练习,我正在构建一个从推文中提取链接的应用程序。这样做的目的是为一个主题获取最多的推特文章。我很难为这个应用程序设计模式

  • 应用程序将捕获tweet并保存它们
  • tweet被解析为链接
  • 链接与其他信息(标题、摘录等)一起保存
  • tweet可以包含多个链接
  • 一个链接可以有很多tweet
我如何:

  • 是否保存这些集合、嵌入的文档
  • 按推文数量排列前十名链接
  • 获取特定日期推文最多的链接
  • 获取链接的推文
  • 获取最新的十条推文
我很想得到一些关于这方面的信息。

两个一般提示: 1)不要害怕复制。在不同的集合中存储格式不同的相同数据通常是一个好主意

2.)如果您想对内容进行排序和汇总,那么将count字段保存在所有位置会有所帮助。mongodb的原子更新方法与upsert命令相结合,使计算和向现有文档添加字段变得容易

以下内容肯定是有缺陷的,因为它是从我的头顶输入的。但我认为最好是坏例子,而不是没有例子;)

添加新推文:

db.x.tweets.insert({...}) //simply insert new document with all fields

//for each found link:
var upsert = true;
var toFind =  { url: '...'};
var updateObj = {'$inc': {'totalCount': 1, 'daycounts.12342342': 1 } }; //12342342 is the day of the tweet
db.x.links.update(toFind, updateObj, upsert);
按推文数量排列前十名链接

db.x.links.find().sort({'totalCount:-1'}).limit(10);
获取特定日期推文最多的链接

db.x.links.find({'$gt':{'daycount.123413453':0}}).sort({'daycount.123413453':-1}).limit(1); //123413453 is the day you're after
获取链接的推文

db.x.tweets.find({'links': 'http://lin.k'});
获取最新的十条推文

db.x.tweets.find().sort({'timeTweeted': -1}, -1).limit(10);

当你习惯了这一点,很难不正常化。你的例子真的很有帮助,非常感谢!:)
db.x.tweets.find().sort({'timeTweeted': -1}, -1).limit(10);