Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB获取最后10项活动_Mongodb - Fatal编程技术网

MongoDB获取最后10项活动

MongoDB获取最后10项活动,mongodb,Mongodb,在我的社交网络中,我想获得成员A的订阅源,成员A如下所示,比如说20个类别/成员。 当类别/成员(后跟成员a)执行活动时,会将其插入名为最近的活动的集合中: { "content_id": "6", // content id member A is following "content_type_id": "6",// content type (category , other member) "social_network_id": "2", // the action

在我的社交网络中,我想获得成员A的订阅源,成员A如下所示,比如说20个类别/成员
当类别/成员(后跟成员a)执行活动时,会将其插入名为最近的活动的集合中:

{
   "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循环。

对于这个用例,我建议反转逻辑,并为成员a保留一个单独的最近10个活动的对象,该对象始终保持最新。虽然该解决方案更重于写,但它使读取变得非常简单,并且可以很容易地进行扩展。我想公开宣传我不久前写的一篇博客文章,其中概述了这种方法


这种“扇出”的方法一开始可能看起来过于复杂,但当你想到重要性筛选/排名(一个类似facebook的网站),推送特别重要事件的消息(facebook、twitter)或定期的摘要电子邮件(几乎所有邮件),您将在代码中得到一个位置来执行所有这些逻辑。

我想我已经说过,我没有真正看到选择标准。因此,如果您在单个集合之外,那么您就有问题。但是,如果您指定的字段是您想要“筛选”的内容,那么只需执行以下操作:

db.collection.find({
“社交网络id”:“2”,
“内容类型id”:“6”,
“内容id”:“6”,
“成员id”:{“$ne”:“51758”}
})
.sort({“$natural”:-1})
.限额(10);
那这又有什么用呢?您匹配数据中的各种条件以进行“类别匹配”(如果我理解其含义),然后确保您是而不是匹配同一成员的条目

最后一部分是“自然”类。这是非常重要的,因为ObjectId是,或者说数学是“不断增加的”。这意味着“最新”条目始终是“最高”值。所以从“最新的”到“最老的”降序排列

最后一部分是一个基本的“极限”。所以只需返回最后10个条目


只要您可以以任何方式在同一个集合中“过滤”,那么这就可以了。

对于特定类别,或者对于所有类别?您可能需要查看mongodb聚合框架来澄清,所有类别是否都意味着匹配的
社交网络id
content\u type\u id
content\u id
?到底是什么?这一部分至少对我来说不是很清楚。假设我有一个名为flower的类别(flower的内容id为1,类别的内容类型id为2)和flower added(ADD的社交网络id为3)一个图像记录类似于content\u id:1,content\u type\u id:2,社交网络id3@KJA我的观点是,虽然这对你来说可能很清楚,但不一定会以这种方式传递给其他人。您是说在单独的集合中使用标识符吗?还是在同一个收藏中?似乎是前者。我给出的答案指出,同一个集合是最简单的方法。和一个简单的解决方案,如果你可以重新组织应用。但是你的问题在这个结构上不清楚。现在已经是我的登录了。我有另一个名为“成员提要”的集合,我为每个成员编写类别/成员的所有活动。但我在IO上苦苦挣扎,数据库大小已经是64G了,这就是为什么我会这么想option@KJA很简单。您想选择什么?你还没有做出明确的声明来确切说明这是什么。我希望这能实现。如果是这样的话,你会得到一个你想要的真实答案。非常感谢你和我在一起。好的,我会的。我希望这会对你有所帮助。假设有100个活动类别,每个类别在执行操作时都会插入到最近的活动集合中(在我的问题中检查集合)。您正在关注10个类别,当您登录时,您希望为您关注的10个类别选择最后10项活动。@KJA甚至还不清楚人们真正需要什么。“你在找另一个收藏吗?”。你似乎在其他评论中提到了这一点。请编辑您的问题以澄清这一点。但我在这里所说的大部分是正确的。MongoDB不进行连接。将所有有效的内容保存在嵌入表单中,并在同一集合中进行“筛选”。这是做事情的最好方式。