【发布时间】:2021-06-20 16:08:10
【问题描述】:
我得到以下语法的编译错误。
var index = ...;
var projection = Builders<Thing>.Projection
.Include(a => a.Name)
.Include(a => a.Stuff[index]);
var options = new FindOptions<Thing, Thing> { Projection = projection };
var filter = Builders<Thing>.Filter.Where(a => a.Name == name);
var output = await _dbContext.Things.Find(filter, options)
.SingleOrDefaultAsync(token);
return output;
计算机对我的选项不满意,要求它们是非通用的。但是,如果我使用FindOptions 而不是FindOptions<A,B>,则没有要设置的属性Projection。因为我确实需要我的投影,所以我一定会使用通用版本。
我还注意到我可以使用FindAsync(...),而不是Find(...),这似乎接受了通用版本。遗憾的是,这不是一个选项,因为该方法的签名是返回Task<Thing>,而我得到的是Task<IAsyncCursor<Thing>>。我被困在如何去游标,获取集合中的单个元素(唯一的命名保证)返回正确类型的任务。 (如果我去ToList(),异步被杀死。)
没有很多例子。
我有一个可以工作的 mongo 脚本,但它将它转换成 C# 是个大障碍。
db.getCollection('things').find(
{ name: "blobbo" },
{ "stuff.shazoo": 1, name: 1 }
)
【问题讨论】:
标签: c# mongodb projection