【问题标题】:Best practices for doing a count using C# driver in mongoDB在 mongoDB 中使用 C# 驱动程序进行计数的最佳实践
【发布时间】:2013-10-30 03:04:08
【问题描述】:

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

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# 驱动程序的方法?

【问题讨论】:

    标签: mongodb mongodb-.net-driver


    【解决方案1】:

    如果您有大量用户(例如数百万)并且您经常查询此计数,为什么不使用 map reduce?从 c# 驱动程序中,您可以读取 map reduce 的结果。

    如果您的用户数量较少(1000 个),您可能可以按需使用聚合框架,具体取决于您需要查询的速度。在此处查看示例Mongo order by length of array。在 c# 驱动程序中,您可以执行 aggregation

    如果您决定非规范化保存计数,您可以从 mongo shell 运行迁移以通过游标创建初始值。请参阅我对这些类型迁移的回答MongoDB: schema migration, update or insert

    【讨论】:

    • 在这种情况下,我可能有 500k 到 1M 的用户,但在向我查询单个用户的情况下,每个用户的关注者/关注者可能约为 200 ~ 2k执行一定长度的数组是有意义的……你怎么看?
    • 您是否只为一位用户查询此信息以说明他们的个人资料页面?还是您在查询您的 50 万用户?
    • 我正在查询 500k,但我只检索每个 ID 的一个文档,然后我需要计算关注/关注者
    • 好的,所以您不是在查询计数吗?如果是这样,那么您可以在文档被反序列化为您的 c# 模型后使用 Array.Length 进行计数
    猜你喜欢
    • 2010-09-12
    • 2013-03-04
    • 2010-11-14
    • 1970-01-01
    • 2011-04-17
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多