Indexing 如何有效地获取RavenDB集合中没有特定值的文档计数?

Indexing 如何有效地获取RavenDB集合中没有特定值的文档计数?,indexing,mapreduce,ravendb,Indexing,Mapreduce,Ravendb,在RavenDB中,我有一个如下所示的文档: public class SystemNotification { public string Body {get;set;} public List<Guid> ReadBy {get;set;} } 公共类系统通知{ 公共字符串体{get;set;} 公共列表ReadBy{get;set;} } 如何创建索引以有效地查询用户的未读通知计数?或者有更好的方法来模拟这个场景吗?var count=session.Que

在RavenDB中,我有一个如下所示的文档:

public class SystemNotification {
    public string Body {get;set;}
    public List<Guid> ReadBy {get;set;}
}
公共类系统通知{
公共字符串体{get;set;}
公共列表ReadBy{get;set;}
}
如何创建索引以有效地查询用户的未读通知计数?或者有更好的方法来模拟这个场景吗?

var count=session.Query()
var count = session.Query<SystemNotification>()
    .Where(x => !x.ReadBy.Any(y => y == yourGuid))
    .Count();
.Where(x=>!x.ReadBy.Any(y=>y==yourGuid)) .Count(); 是否有更好的方法对此进行建模取决于系统中有多少用户以及其他一些因素


附带说明:不要将guid用于您的id。它们很难阅读,与hilo键相比没有特别的优势。

用户数量将相当低(<200)。出于基础设施方面的原因,我们正在为一些ID使用GUID,但如果可能的话,我们会尝试使用hilo。除了可读性之外,guid还有其他明显的缺点吗?另外,出于某种原因,我认为查询效率很低,但我只是尝试了一下,它看起来不错。我想我应该相信raven会做正确的事情:)因为raven会自动为你创建一个索引,并且在这种简单的情况下查询这个家伙非常快,是的-你不需要担心这里的性能。GUI没有特别的缺点,因为它们无论如何都会被转换成字符串。因此,如果您处理TransformResults之类的事情,您必须提供Guid的stirng表示,但这根本不是问题。