1

让我们想象一个普通的博客引擎(仅作为示例)。该模型将包含带有嵌入式评论“集合”的帖子集合。

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

  1. 这样做的最佳方法是什么?
  2. 这是一个有价值的优化吗?(除了减少网络流量)

PS 我使用官方 C# 驱动程序 + fluent-mongo 但我可以放弃 linq 有一个好的理由。

4

2 回答 2

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) { 
    ...
} 
于 2011-09-06T15:34:40.100 回答
0

为什么不使用最新评论的专用集合?发布评论时,您必须执行两次插入,但获取最新评论很简单。通常,您获取这些内容的频率要比发布新评论的频率高得多。

正如史蒂夫 B 指出的那样,这通常是一种“视图”,因为该集合可能包含与帖子集合中的评论略有不同的信息。例如,您可能希望在每条评论中存储帖子 ID 和帖子名称,以便显示相应的链接。

你可以使用一个有上限的集合,比如 100 个元素,它会自动删除旧评论(即,实现 FIFO)

于 2011-08-31T12:25:29.173 回答