让我们想象一下通常的博客引擎(仅举例)。该模型将包含具有嵌入式注释“集合”的帖子集合。
现在,我需要获得最近10条评论以及我的帖子数据。
P.S。我使用官方C#驱动程序+ fluent-mongo,但我可以放弃linq,这是有充分理由的。
答案 0 :(得分:2)
你不能使用Slice命令检索数组的子集(最后10个)吗? 类似的东西:
db.posts.find({}, {comments:{$slice: -10}})
当我不得不做类似的事情时,我在官方文档中找到了这个。
我可以找到在C#中使用slice命令的最简单方法是:
var your_query;
var slice = Fields.Slice("comments", -10);
var cursor = collection.Find(your_query).SetFields(slice);
foreach (var document in cursor) {
...
}
答案 1 :(得分:0)
为什么不使用最新评论的专用集合?发布评论时,您必须执行两次插入,但获取最新评论很简单。通常情况下,您可以更频繁地获取这些内容,而不是发布新评论。
正如Steve B所指出的,这通常是一种“观点”,因为这个集合可能包含的信息与帖子集合中的评论略有不同。例如,您可能希望在每个注释中存储帖子ID和帖子名称,以便显示相应的链接。
您可以使用capped collection,例如100个元素,它会自动删除旧注释(即实现FIFO)