C# 带投影的Mongo聚集

C# 带投影的Mongo聚集,c#,mongodb,C#,Mongodb,鉴于以下文件 { "Id": "MyNormalObjectId", "CompanyId" : 1234, "User" : { "UserId":4567, "FirstName":"Tester", "Lastname":"McCtesterson&qu

鉴于以下文件

{
 "Id": "MyNormalObjectId",
 "CompanyId" : 1234,
 "User" : 
    {
         "UserId":4567,
         "FirstName":"Tester",
         "Lastname":"McCtesterson"
    }
}
如何编写聚合查询以返回给定公司中所有唯一用户的列表(包括名字和姓氏)

FilterDefinitionBuilder=Builders.Filter;
var filter=builder.Eq(t=>t.CompanyId,CompanyId);
var aggregate=_col.aggregate();
aggregate.Match(filter.GroupBy(t=>t.User.UserId,??)

期望的结果是UserMetadata的哈希集。我见过很多人为了他们需要的东西直接去BSon,如果有必要,我可以。强类型总是更好。

您可以在
$group
管道阶段内使用
$addToSet
操作符 以获得所需的输出

db.collection.aggregate([
  {
    "$match": {
      "CompanyId": 1234  // Find Conditions go here
    }
  },
  {
    "$group": {
      "_id": "$CompanyId",
      "Users": {
        "$addToSet": "$User",
      },
    },
  },
])

分组前,请先解开
用户
数组。如果不清楚,请道歉。为了清楚起见,这个例子被淡化到了可能不清楚的程度。用户不在数组中。每个文档一对一。这个的C版本是什么?这在Mongo Shell中,只需将其转换为C即可#
db.collection.aggregate([
  {
    "$match": {
      "CompanyId": 1234  // Find Conditions go here
    }
  },
  {
    "$group": {
      "_id": "$CompanyId",
      "Users": {
        "$addToSet": "$User",
      },
    },
  },
])