【问题标题】:MongoDB specify size ExceptionMongoDB 指定大小异常
【发布时间】:2016-02-24 16:28:44
【问题描述】:

我的代码有一个例外: 要测试可尾光标,请在该程序运行时将文档手动插入到 test.capped 集合中,并验证它们是否已回显到控制台窗口。

public static class Program
{

    public static void Main(string[] args)
    {


        try
        {
            var server = MongoServer.Create("mongodb://distnatserver/?safe=true");
            var database = server["test"];



            if (database.CollectionExists("capped"))
            {
                database.DropCollection("capped");
            }
            var collectionOptions = CollectionOptions.SetCapped(true).SetMaxDocuments(5);
            var commandResult = database.CreateCollection("capped", collectionOptions);
            var collection = database["capped"];



            BsonValue lastId = BsonMinKey.Value;
            while (true)
            {
                var query = Query.GT("_id", lastId);
                var cursor = collection.Find(query)
                    .SetFlags(QueryFlags.TailableCursor | QueryFlags.AwaitData)
                    .SetSortOrder("$natural");
                using (var enumerator = (MongoCursorEnumerator<BsonDocument>)cursor.GetEnumerator())
                {
                    while (true)
                    {
                        if (enumerator.MoveNext())
                        {
                            var document = enumerator.Current;
                            lastId = document["_id"];
                            ProcessDocument(document);
                        }
                        else {
                            if (enumerator.IsDead)
                            {
                                break;
                            }
                            if (!enumerator.IsServerAwaitCapable)
                            {
                                Thread.Sleep(TimeSpan.FromMilliseconds(100));
                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unhandled exception:");
            Console.WriteLine(ex);
        }

        Console.WriteLine("Press Enter to continue");
        Console.ReadLine();
    }

    private static void ProcessDocument(
        BsonDocument document
    )
    {
        Console.WriteLine(document.ToJson());
    }
}

未处理的异常: MongoDB.Driver.MongoCommandException:命令“创建”失败:指定大小:当上限为真时(响应:{“ok”:0.0,“errmsg”:“指定大小:当上限为真”,“代码”:14832 })

【问题讨论】:

    标签: c# mongodb


    【解决方案1】:

    根据documentation,在创建有上限的集合时,必须以字节为单位指定集合的​​最大大小,例如:

    db.createCollection( "log", { capped: true, size: 100000 } )
    

    【讨论】:

    • thnx 它解决了上限为真的问题,并给了我另一个例外:无法将类型为 'MongoDB.Driver.Operations.Cursor iEnumerator 的对象转换为类型'MongoDB.Driver.MongoCursor Enumerator 供她使用(var enumerator = (MongoCursorEnumerator)cursor.GetEnumerator())
    • 你需要演员表吗?你可以改用var enumerator = cursor.GetEnumerator(); 吗?
    • 它将显示 enumerator.IsDead 和 enumerator.IsServerAwaitCapable 的错误(枚举器不包含 IsDead 和 IsServerAwaitCapable 的定义)
    • 如果你使用它是否有效:var enumerator = new MongoCursorEnumerator&lt;T&gt;(cursor).GetEnumerator()
    • 不工作,但是当我用 BsonDocument 更改 T 时给我('MongoCursorEnumerator' 不包含 'GetEnumerator' 的定义,并且没有扩展方法 'GetEnumerator' 接受类型的第一个参数' MongoCursorEnumer)
    猜你喜欢
    • 2021-04-17
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多