键集(寻道)分页和MongoDb驱动程序C#
我正在尝试使用C#MongoDB驱动程序通过键集/搜索分页来分页MongoDB结果。我没有尝试使用偏移分页 基本上,我有一个包含许多键集(寻道)分页和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”
标记的数据库。标记的结构如下所示:
{
“_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
字段上有索引的情况下,对于几百万个标签来说,它应该工作得相对较快。不过,您必须在数据集上运行测试,以了解它的具体性能。