我有一个名为question的文档集合。 我的模型如下
问题包含评论。评论具有状态和日期。
对于每个问题,我要将最新评论的状态设为根级属性。
我知道我需要一个静态索引,我尝试过各种各样的东西。我知道我可以用一个像
这样的问题来做(from x in question.Comment
orderby x.date
select x.status).Take(1).FirstOrDefault()
但是我无法弄清楚如何将它作为整个集合的索引。
我也尝试查询结果以返回问题并注明我正在寻找的状态,但这会抛出一个否定的Any()错误。
from x in Session.Query<Question>()
where !(from y in x.Comments
where ListOfStatusesCommentShouldntHave.Contains(y.Status) select y).Any()
select x)
答案 0 :(得分:1)
如果我理解你的问题,这应该有效:
var results = Session.Query<Question>()
.Select(q => q.Comments.OrderBy(c => c.Date).FirstOrDefault().Status);
答案 1 :(得分:0)
我们做了类似的事情并使用Map Reduce索引来查询索引上的嵌套属性。为此,您需要创建一个扩展AbstractIndexCrationTask<T, U>
的索引,如下所示:
public class DiscussionTopicPosts_Index : AbstractIndexCreationTask<DiscussionTopicPosts, DiscussionTopicPosts_Index.Post>
{
public class Post
{
public string DiscussionTopicPostsId { get; set; }
public int Id { get; set; }
public string Message { get; set; }
public Guid PostedByLearnerId { get; set; }
public DateTime InsertedUTC { get; set; }
}
public DiscussionTopicPosts_Index()
{
Map = topicPosts => from p in topicPosts
from post in p.Posts
where post.IsEnabled == true
select new
{
DiscussionTopicPostsId = p.Id,
Id = post.Id,
Message = post.Message,
PostedByLearnerId = post.PostedByLearnerId,
InsertedUTC = post.InsertedUTC,
};
Store(x => x.DiscussionTopicPostsId, FieldStorage.Yes);
Store(x => x.Id, FieldStorage.Yes);
Store(x => x.Message, FieldStorage.Yes);
Store(x => x.PostedByLearnerId, FieldStorage.Yes);
Store(x => x.InsertedUTC, FieldStorage.Yes);
Sort(x => x.Id, SortOptions.Int);
}
}
请注意,Map
有另一个from
语句,该语句向下钻取到Posts
文档上名为DiscussionTopicPosts
的嵌套属性。