如何在MongoDB中使用collection.Aggregate.Project()
本文关键字:Aggregate collection Project MongoDB | 更新日期: 2023-09-27 18:02:25
考虑以下代码:
var results = collection.Aggregate()
...
.Lookup( ... )
.Project( ??? );
我需要在上面的查询上调用Project()。我还没能弄清楚如何构建ProjectionDefinition<T1, T2>
类型的投影定义,这是Project()需要的。
在这种情况下,Builders类似乎不起作用:
var projection = Builders<Event>.Projection.Include(x => x).Include("agg_res.SomeField");
,因为它实例化了类型ProjectionDefinition<T>
的定义。
我找到了答案。通过使用不同的lookup()重载,聚合可以同时执行查找和投影:
var results = collection.Aggregate()
.Match(filter)
.Lookup<Event, User, AggregatedEvent>(users, e => e.OwnerId, u => u.Id, r => r.OwnerUsers)
.ToList();
这允许使用lambdas来指示应该匹配哪些字段以及在哪里放置连接结果(上面示例中的OwnerUsers)。注意,AggregatedEvent扩展了Event,并包含一个名为OwnerUsers的数组字段。