考虑以下代码:
var results = collection.Aggregate()
...
.Lookup( ... )
.Project( ??? );
我需要在上面的查询中调用Project()。我还无法弄清楚如何构建type的投影定义ProjectionDefinition<T1, T2>
,这是Project()所需要的。
在这种情况下,Builders类似乎不起作用:
var projection = Builders<Event>.Projection.Include(x => x).Include("agg_res.SomeField");
实例化type的定义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的数组字段。这是放置比赛的地方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句