Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oplog.rs上的MongoDB C驱动程序可定制光标_Mongodb_Mongodb .net Driver - Fatal编程技术网

oplog.rs上的MongoDB C驱动程序可定制光标

oplog.rs上的MongoDB C驱动程序可定制光标,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我正在尝试使用类似于Java实现的MongoDB C驱动程序编写一个oplog watcher 到目前为止,我已经设法写了: public static void Read() { const string connectionString = "mongodb://127.0.0.1:27017,127.0.0.1:27018/?replicaSet=rs0"; MongoClient mongoClient = new MongoClient(connectionString

我正在尝试使用类似于Java实现的MongoDB C驱动程序编写一个oplog watcher

到目前为止,我已经设法写了:

public static void Read()
{
    const string connectionString = "mongodb://127.0.0.1:27017,127.0.0.1:27018/?replicaSet=rs0";
    MongoClient mongoClient = new MongoClient(connectionString);

    MongoDatabase local = mongoClient.GetServer().GetDatabase("local");
    MongoCollection opLog = local.GetCollection("oplog.$main");
    BsonValue lastId = BsonMinKey.Value;
    while (true)
    {
        var query = Query.GT("_id", lastId);
        var cursor = opLog.FindAs<BsonDocument>(query)
                    .SetFlags(
                        QueryFlags.AwaitData |
                        QueryFlags.TailableCursor |
                        QueryFlags.NoCursorTimeout)
                    .SetSortOrder(SortBy.Ascending("$natural"));
        using (var enumerator = (MongoCursorEnumerator<BsonDocument>)cursor.GetEnumerator())
        {
            while (true)
            {
            // I get a "tailable cursor requested on non capped collection" Exception
                if (enumerator.MoveNext())
                {
                    var document = enumerator.Current;
                    lastId = document["_id"];
                }
                else
                {
                    if (enumerator.IsDead)
                    {
                        break;
                    }
                    if (!enumerator.IsServerAwaitCapable)
                    {
                        Thread.Sleep(TimeSpan.FromMilliseconds(100));
                    }
                }
            }
        }
    }
}

我已经在服务器上创建了oplog,并使用找到的说明从mongo命令行成功地查询了它,但我不明白为什么异常会说它没有上限。

如果您正在使用并设置了复制集,那么您就有了oplog

要查询oplog,可以像查询一样使用数据库“local”

然后改变

local.GetCollection("oplog.$main");


我已经看过了,但它创造了一个新的封顶集合,我对oplog.rs更感兴趣。谢谢你的建议,它解决了问题。我很好奇,如果你能解释一下oplog的确切意义,链接示例中的$main?如果未启用复制集,是否会创建文件?不确定名称oplog.$main。这可能是旧蒙哥德命名法的遗产。就oplog而言,它是为复制而创建的,而不是在没有创建复制集的情况下创建的。您可能听说过日志文件,但它们不是oplog-请参阅Ok,谢谢您提供的额外信息。事实上,我对oplog而不是日志文件感兴趣。
local.GetCollection("oplog.rs");