从最后搜索MongoDB集合(c#)

时间:2015-03-29 04:14:12

标签: mongodb-.net-driver

我正在寻找获得相当大(> 100万个文档)MongoDB集合的最后元素的最有效方法。

具体来说,它是oplog集合,我在给定时间戳之后查找所有条目。搜索大约一百万个条目的时间戳大于当前时间戳是没有意义的,因为它们都是旧的,因为集合以其自然顺序存储。

有没有办法告诉MongoDB从集合的末尾进行搜索? 我尝试使用Skip(N)进行linq查询,但速度非常慢。它似乎从一开始就解析所有文档,并且不会返回第一个N.

1 个答案:

答案 0 :(得分:1)

最有效的方法可能是使用aggregation。如果您的集合已排序,则可以使用此聚合获取最后一个时间戳:

      var group = new BsonDocument
        {
            {
            "$group", new BsonDocument
               {
                    {"_id", 0},
                    {"newestTimeStamp", new BsonDocument { {"$last","$timeStamp"} } }

               }
            }
        };
        var pipeline = new[] {group};
        var result = _dtCollection.Aggregate(pipeline);
    }

然后,您可以将结果反序列化为Timestamp类。如果要获取多个元素,可以使用$ match创建类似的表达式。

还要确保在TimeStamp字段上为集合添加索引。如果您决定使用它,这可能会使您的LINQ查询更快。