在mongoDB中使用C#驱动程序进行计数的最佳实践

在mongoDB中使用C#驱动程序进行计数的最佳实践,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我想知道对作为集合一部分的列表进行计数的最佳方法,为了简单起见,我将其抽象为以下模型: public class User { [BsonId] public ObjectId Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public List<ObjectId> Followers { get; set;

我想知道对作为集合一部分的列表进行计数的最佳方法,为了简单起见,我将其抽象为以下模型:

public class User
{
    [BsonId]
    public ObjectId Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<ObjectId> Followers { get; set; }
    public List<ObjectId> Following { get; set; }  
}
公共类用户
{
[BsonId]
公共对象Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共列表跟随者{get;set;}
{get;set;}后面的公共列表
}

假设每个酒店的平均追随者/追随者人数可能在2k左右,我知道有些人喜欢使用预先计算的信息,在上述情况下建议这样做吗?如果是这样的话,使用C#驱动程序的方法是什么

如果您有大量用户(比如说数百万),并且经常查询这个数量,为什么不使用map reduce?从c#驱动程序中,您可以读取地图缩小的结果

如果您有少量用户(1000个),您可能会根据需要使用聚合框架,这取决于您需要查询的速度。请参见此处的示例。通过c#驱动程序,您可以执行


如果决定对保存计数进行非规范化,则可以从mongo shell运行迁移,通过光标创建初始值。请参阅我关于这些类型迁移的回答

在这种情况下,我可能会有500到100万用户,但每个用户的追随者/追随者可能大约为200~2k,在向我查询单个用户的情况下,执行一段长度的数组是有意义的……您认为如何?您是否仅为一个用户(比如他们的个人资料页面)查询此内容?或者您正在查询您的500K用户?我正在查询500K用户,但每个ID只检索一个文档,然后我需要对followers/followers进行计数确定您没有查询计数吗?如果是这样,那么您可以在文档被反序列化到您的c#模型之后使用