我想知道对作为集合一部分的列表进行计数的最佳方法,为简单起见,我已抽象为以下模型:
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; }
}
假设每个属性的关注者/关注者的平均数可能约为2k,我知道有些人喜欢使用inc预先计算信息,是否在上述情况下推荐?如果是这种情况可能是使用C#驱动程序的方法?
答案 0 :(得分:0)
如果您拥有大量用户(比如数百万)并经常查询此计数,为什么不使用地图缩减?从c#驱动程序中,您可以读取map reduce的结果。
如果您拥有少量用户(1000),则可以根据需要使用聚合框架,具体取决于您需要查询的速度。请参阅此处的示例Mongo order by length of array。从c#驱动程序中,您可以执行aggregation
如果您决定对保存计数进行非规范化,则可以从mongo shell运行迁移,以通过游标创建初始值。请参阅我对这些迁移类型的回答MongoDB: schema migration, update or insert