【发布时间】:2021-01-17 02:24:33
【问题描述】:
当我执行find 方法并且我有一个游标时,游标包含在迭代之前检索到的文档?
我有这个方法:
public async Task<Post> GetPostByIdAsync(ObjectId id, CancellationToken cancellationToken)
{
using var cursor = await _Collection.FindAsync(post => post.Id == id, cancellationToken: cancellationToken);
return await cursor.SingleAsync(cancellationToken);
}
首先,我调用返回游标的FindAsync,然后调用返回文档的SingleAsync。我对此有一些疑问。
- 在什么时候执行查询?当我拨打
FindAsync或拨打SingleAsync时? - 当我执行
find方法并且我有一个游标时,游标包含在迭代之前检索到的文档? - 如果我有一个包含 100 个文档的游标,但我只遍历前 20 个文档,是否会从服务器查询和检索其他 80 个文档?
- 为什么获取游标和迭代游标是两个异步操作?
public async Task<Post> GetPostByIdAsync(ObjectId id, CancellationToken cancellationToken)
{
var query = _Collection.AsQueryable().Where(post => post.Id == id);
return await query.SingleAsync(cancellationToken);
}
- 如果我因为想使用 LINQ 而调用
AsQueryable,我只有一种异步方法。是否有任何服务器操作运行同步并阻塞线程? - 我看到
IMongoQueryable<T>是IAsyncCursorSource<T>的子类型。光标和光标源有什么区别?
【问题讨论】:
标签: mongodb mongodb-query mongodb-.net-driver