如何在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>的定义。

如何在MongoDB中使用collection.Aggregate.Project()

我找到了答案。通过使用不同的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的数组字段。