【问题标题】:C# Mongo Query for Count with $maxTimeMSC# Mongo 使用 $maxTimeMS 查询计数
【发布时间】:2015-07-13 18:40:34
【问题描述】:

我在尝试从 C# MongoDB 获取过滤器的计数时尝试实现 $maxTimeMS。我想不出这样做。有人可以帮我吗?

我的 C# 代码:

var doc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(jsonQuery);           
var query = new QueryDocument(doc);
long Count = base.Collection.Count(query);

我正在尝试实际执行的 Mongo Shell 命令

db.MyCollection.find({ "$query": {"Age" : 101}, "$maxTimeMS": 100 } )

但是在我的 C# Mongo 中,我使用 Count 方法来获取计数,而不是使用 find 方法,我需要的是在执行获取计数时如何在 C# 查询中设置 $maxTimeMS?

【问题讨论】:

    标签: c# .net mongodb .net-4.5


    【解决方案1】:

    CountOptionsFindOptions 基本一样,所以你可以这样做:

    var options = new CountOptions
            {
                MaxTime = TimeSpan.FromSeconds(3)
            };
    
    long Count = base.Collection.Count(query,options);
    

    甚至只是:

    var options = new FindOptions
            {
                MaxTime = TimeSpan.FromSeconds(3)
            };
    
    long Count = base.Collection.Find(query,options).Count();
    

    【讨论】:

    • 谢谢@Blakes!!以上2条语句的执行有什么不同吗?性能等...
    • @Prabhakaran 不。 “链式”执行将返回一个在执行前由.Count() 修改的对象。它们基本相同。我只是在证明“选项”的“抽象”类型也是一样的。
    • 谢谢@Blakes。关于 Find 或 FindAs 命令的游标执行的另一个问题,如果我为游标设置 MaxTime 并且当迭代器运行以获取数据时,什么时候会发生超时异常?是在迭代期间还是在我执行 Find 或 FindAs 命令获取光标时?
    • @Prabhakaran 起初误读了这一点。 “超时”用于“查询持续时间”,而不是从游标“获取结果”。光标超时是另一回事。
    • 谢谢您的注意。我们可以显式地为游标设置超时,还是从.Net 中我们可以终止长时间运行的游标(不是非活动游标)。
    猜你喜欢
    • 2014-09-17
    • 2014-09-01
    • 2021-07-19
    • 1970-01-01
    • 2015-08-08
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    相关资源
    最近更新 更多