- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用一个包含数百万条异步填充记录的集合,因此无法保证顺序。
查询 MongoDB 时,FindAsync 方法将允许添加过滤器,但不允许添加排序。
如何确保使用 IAsyncCursor 返回的记录顺序?我的集合中的纪元日期戳字段有一个升序索引,是否足以保证排序顺序?
====================
FindAsync 方法返回一个 IAsyncCursor。记录以任意批处理返回,这些批处理使用以下使用 using/while 构造进行处理。
var collection = _database.GetCollection<BsonDocument>("restaurants");
var filter = new BsonDocument();
var count = 0;
using (var cursor = await collection.FindAsync(filter))
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (var document in batch)
{
// What order will these records be in? how do I guarantee order ascending by epochtimestamp?;
}
}
}
是否会根据整个查询对每个异步“批处理”进行排序?我如何保证记录的顺序正确?
epocdatestamp 字段上的升序索引将允许我返回一个完整的排序列表(由于记录的数量,需要很长时间)。
我是否应该按照我需要保证的顺序将完整的排序列表重写回数据库?这样以后的 IAsyncCursor 查询将按顺序返回记录。
我需要这样做吗?还是升序指数就足够了?
最佳答案
可以将排序添加到 “FindOptions”
对象并作为参数提供给 FindAsync。在本例中,它是对名为 epochtimestamp
的字段进行升序排序。
当你知道怎么做时就很简单,
var collection = _database.GetCollection<BsonDocument>("restaurants");
var filter = new BsonDocument();
var sort = Builders<BsonDocument>.Sort.Ascending("epochdatestamp");
var options = new FindOptions<BsonDocument>
{
Sort = sort
};
var count = 0;
using (var cursor = await collection.FindAsync(filter, options))
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (var document in batch)
{
// process document
count++;
}
}
}
关于c# - 使用 IAsyncCursor 查询保证排序顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31879709/
我目前在我的数据中有一个文本索引。我正在执行正则表达式搜索,我想确保使用了正确的索引。在 mongo shell 中我刚刚使用了 explain 但我怎么能在 C# 驱动程序中使用 explain 呢
我正在使用一个包含数百万条异步填充记录的集合,因此无法保证顺序。 查询 MongoDB 时,FindAsync 方法将允许添加过滤器,但不允许添加排序。 如何确保使用 IAsyncCursor 返回的
有谁知道旧版 MongoCursor 的等效“计数”方法在哪里,但在新驱动程序 (IAsyncCursor) 中?或者有人知道如何使用 2.0 异步驱动程序/方法复制它吗? 想法是通过分页(跳过和限制
我正在尝试获取服务器中所有数据库的列表并最终将它们打印出来(即使用它们的名称作为 string s)。使用以前版本的 c# 驱动程序,我可以调用 Server.GetDatabases() , 但已替
我是 MongoDB(及其 dotnet 核心 C# 驱动程序)的新手,我有以下关于 IAsyncCursor 行为的问题: 来自官方文档:https://docs.mongodb.com/getti
我正在为使用 mongoDB c# 驱动程序的 DAL 创建一些单元测试。问题是我有这个方法要测试: public async virtual Task> GetAsync(Expressio
我是一名优秀的程序员,十分优秀!