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

How to use collection.Aggregate.Project() in MongoDB?

考虑以下代码:

var results = collection.Aggregate()
...
.Lookup( ... )
.Project( ??? );

我需要在上述查询中调用 Project()。我一直无法弄清楚如何构建 ProjectionDefinition<T1, T2> 类型的投影定义,这是 Project() 所需要的。

Builders class 在这种情况下似乎不起作用:

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();

这允许使用 lambda 来指示应匹配哪些字段以及放置连接结果的位置(上例中的 OwnerUsers)。请注意,AggregatedEvent 扩展了 Event 并包含一个名为 OwnerUsers 的数组字段。这是放置火柴的地方。