键集(寻道)分页和MongoDb驱动程序C#

键集(寻道)分页和MongoDb驱动程序C#,c#,asp.net,database,mongodb,mongodb-.net-driver,C#,Asp.net,Database,Mongodb,Mongodb .net Driver,我正在尝试使用C#MongoDB驱动程序通过键集/搜索分页来分页MongoDB结果。我没有尝试使用偏移分页 基本上,我有一个包含许多标记的数据库。标记的结构如下所示: { “_id”:ObjectId(“5fc5cdb5d6ee08681d32d3ba”), “UsageCount”:数字长(123456), “名称”:“技术” } 我想首先按照UsageCount属性对数据库进行降序排序。此属性不是唯一的。对于UsageCount,许多标记可以具有相同的值。示例结果如下: [ { “_id”

我正在尝试使用C#MongoDB驱动程序通过键集/搜索分页来分页MongoDB结果。我没有尝试使用偏移分页

基本上,我有一个包含许多
标记的数据库。
标记的结构如下所示:

{
“_id”:ObjectId(“5fc5cdb5d6ee08681d32d3ba”),
“UsageCount”:数字长(123456),
“名称”:“技术”
}
我想首先按照
UsageCount
属性对数据库进行降序排序。此属性不是唯一的。对于
UsageCount
,许多
标记可以具有相同的值。示例结果如下:

[
{
“_id”:ObjectId(“5fc5cdb5d6ee08681d32d3ba”),
“使用计数”:长(9000)个,
“名称”:“技术”
},
{
“_id”:ObjectId(“5fc5cdb5d6ee08681d32d3b1”),
“使用计数”:数字长(8000),
“名称”:“技术”
},
{
“_id”:ObjectId(“5fc5cdb5d6ee08681d32d3b2”),
“使用计数”:数字长(7000),
“名称”:“技术”
},
...
]
示例C#代码:

//获取mongo查询表
IMongoQueryable标记=_mongoDbService.GetCollection(nameof(Tag));
//按使用计数按降序排列数据库
IOrderedMongoQueryable orderedTags=tags.OrderByDescending(tag=>tag.UsageCount);
//将标签放在ID为5FC5CDB5D6EE08681D33B1的标签后面
List results=orderedTags.After(“5fc5cd5d6ee08681d32d3B1”).Take(1.tolistsync().ConfigureAwait(false);
此代码的结果应该是一个列表,其中只包含上面示例中的最后一个标记:

{
    "_id" : ObjectId("5fc5cdb5d6ee08681d32d3b2"),
    "UsageCount" : NumberLong(7000),
    "Name" : "technology"
}
这里的问题是上述代码中的
After
方法不存在。我希望通过任何手段都能达到同样的效果。

一些可能的解决办法可能是

  • 首先在已排序文档列表中找到
    5fc5cdb5d6ee08681d32d3b2
    的索引,然后调用
    skip(index)
    。这需要两个查询,这不是很好,但更重要的是,我不知道我是否也能找到索引
  • 之后找到与
    等效的方法
  • 其他人

  • 我看到这个问题没有解决方案。

    您可以使用如下聚合管道获得所需的结果:

    db.Tags.aggregate(
    [
    {
    $sort:{UsageCount:-1}
    },
    {
    $group:{
    _id:null,
    标记:{$push:$$ROOT}
    }
    },
    {
    $set:{
    标签:{
    $slice:[
    “$tags”,
    {$add:[{$indexOfArray:[“$tags.\u id”,ObjectId(“5fc5cdb5d6ee08681d32d3b1”)]},1]},
    {$size:“$tags”}]
    }
    }
    },
    {
    $展开:“$标记”
    },
    {
    $replaceWith:“$tags”
    }
    ]
    )
    


    然而,将其转换为强类型c#查询将非常困难(如果不是不可能的话)。查看此项,以找到运行上述复杂查询的替代方法。

    您能否详细说明此查询的效率,以及步骤和工作原理的说明?我认为自己是一个蒙戈新手,非常感谢能够更多地了解这里到底发生了什么。我一有空就加解释。同时,访问mongo docs网站,查看管道中使用的每个
    $xxxx
    操作符。应该能让你了解每个操作员的工作。至于效率,至少在
    UsageCount
    字段上有索引的情况下,对于几百万个标签来说,它应该工作得相对较快。不过,您必须在数据集上运行测试,以了解它的具体性能。