在我的社交网络中,我想获得成员A 的Feed,成员A 正在关注 20类别/成员。
当类别/成员(后跟成员A )执行活动时,会将其插入名为 recent_activity 的集合中:
{
"content_id": "6", // content id member A is following
"content_type_id": "6",// content type (category , other member)
"social_network_id": "2", // the action category did (add/like/follow)
"member_id": "51758", //Member A
"date_added": ISODate("2014-03-23T11:37:03.0Z"),
"platform_id": NumberInt(2),
"_id": ObjectId("532ec75f6b1f76fa2d8b457b"),
"_type": {
"0": "Altibbi_Mongo_RecentActivity"
}
}
我想在成员A 登录系统时获取类别/成员的最后10项活动
我的问题:
如何获得所有类别/成员的10项活动。
最好在一个查询中执行此操作或执行for循环。
答案 0 :(得分:1)
对于这个用例,我建议反转逻辑并为成员A保留最新10个活动的单独对象,并始终保持最新状态。虽然这种解决方案的写入量更大,但它使读取变得非常简单,并且可以非常容易地扩展。我想公开宣传我刚才写的一篇关于news feeds with mongodb的博文,其中概述了这种方法。
这个'粉丝'这种方法起初可能看起来过于复杂,但是当你考虑重要性过滤/排名(啦啦啦),推送特别重要的事件(facebook,twitter)或常规摘要电子邮件(几乎所有)时,你会得到一个位置。代码来执行所有这些逻辑。
答案 1 :(得分:0)
我认为我评论说T&#t。我没有真正看到选择标准。所以如果你在外面"一个集合,然后你有问题。但是,如果您指定的字段是您想要的内容,那么过滤"通过,然后就这样做:
db.collection.find({
"social_network_id": "2",
"content_type_id": "6",
"content_id": "6",
"member_id": { "$ne": "51758" }
})
.sort({ "$natural": -1 })
.limit(10);
那是做什么的?您匹配数据中的各种条件以进行"类别匹配" (如果我理解了这意味着什么),那么你要确保你不匹配同一成员的条目。
最后的部分是"自然"分类。这是重要,因为ObjectId
是monotinic,或数学代表"不断增加"。这意味着"最新的"条目总是最高的"值。所以降序是#34;最新的"到最老的"。
最后一部分是基本的#34;限制"。所以只返回最后10个条目。
只要你可以"过滤"在你想要的任何方式的同一集合中,这应该没问题。