为什么在使用Mongodb C#驱动程序时没有加载我的嵌入式文档集合?

为什么在使用Mongodb C#驱动程序时没有加载我的嵌入式文档集合?,mongodb,mongodb-.net-driver,mongodb-csharp-2.0,Mongodb,Mongodb .net Driver,Mongodb Csharp 2.0,我有一个简单的类,其中包含一个文档数组。下面是C#对象和映射 出于某种原因,当我找到一个用户时,MongoDB驱动程序没有返回嵌入的文档集合。我可以使用AddToSet和Pull编辑集合 我也不明白为什么我需要显式映射Groups属性。我想如果我调用cm.AutoMap(),它就会工作 这是我用来加载用户的代码 var collection = Database.GetCollection<User>(Constants.UsersCollectionName); var buil

我有一个简单的类,其中包含一个文档数组。下面是C#对象和映射

出于某种原因,当我找到一个用户时,MongoDB驱动程序没有返回嵌入的文档集合。我可以使用AddToSet和Pull编辑集合

我也不明白为什么我需要显式映射Groups属性。我想如果我调用
cm.AutoMap()
,它就会工作

这是我用来加载用户的代码

var collection = Database.GetCollection<User>(Constants.UsersCollectionName);

var builder = Builders<User>.Filter;
FilterDefinition<User> filter = builder.Eq(x => x.Id, UserId);

var result = await collection.Find(filter)
    .ToListAsync();

return result;
编辑: 我刚刚尝试将其作为字符串列表,但仍然没有返回结果。我还删除了显式映射,它引发了一个异常。
元素“组”与AssetStream.Model.Admin.User类的任何字段或属性都不匹配。

啊,我打赌这是因为没有公共setter。

是的,您需要在属性上至少有一个私有setter,以便驱动程序能够设置值。驱动程序没有修改预先存在的列表。啊,好吧,所以我不应该在构造函数中初始化集合,它会正常工作吗?你有没有在@BenCr对这个问题进行过排序?我在升级到最新版本的Mongodb驱动程序时面临类似的问题
public class User
{
    public User()
    {
        Groups = new HashSet<UserGroup>();
    }

    public string Id { get; set; }

    public string Email { get; set; }

    public IEnumerable<UserGroup> Groups { get; }
}

public class UserGroup
{
    public string GroupId { get; set; }

    public string TenantId { get; set; }
}
BsonClassMap.RegisterClassMap<UserGroup>(cm =>
{
    cm.AutoMap();
});

BsonClassMap.RegisterClassMap<User>(cm =>
{
    cm.AutoMap();
    cm.MapIdProperty(c => c.Id)
        .SetIdGenerator(StringObjectIdGenerator.Instance)
        .SetSerializer(new StringSerializer(BsonType.ObjectId));
    cm.MapProperty(x => x.Groups);
});
{
    "_id" : ObjectId("556717bb10e5c4a3f831dfca"),
    "Email" : "test@test.com",
    "Groups" : [ 
        {
            "GroupId" : "5641c6da134b9006dcdc0bff",
            "TenantId" : "5567179f10e5c4a3f831dfc8"
        }
    ]
}