MongoDb通过过滤/排序查询嵌入式集合

时间:2011-08-31 12:09:23

标签: c# mongodb mongodb-.net-driver fluent-mongo

让我们想象一下通常的博客引擎(仅举例)。该模型将包含具有嵌入式注释“集合”的帖子集合。

现在,我需要获得最近10条评论以及我的帖子数据。

  1. 这样做的最佳方式是什么?
  2. 这是一项有价值的优化吗? (除了减少网络流量)
  3. P.S。我使用官方C#驱动程序+ fluent-mongo,但我可以放弃linq,这是有充分理由的。

2 个答案:

答案 0 :(得分:2)

你不能使用Slice命令检索数组的子集(最后10个)吗? 类似的东西:

db.posts.find({}, {comments:{$slice: -10}})

当我不得不做类似的事情时,我在官方文档中找到了这个。

链接:http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-RetrievingaSubrangeofArrayElements

我可以找到在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)