0

我有一个简单的类,其中包含一组文档。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;

我尝试为 groups 属性添加显式包含投影,但导致我删除了所有其他属性并且仍然有一个空集合。

这是上课...

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

和数据库中的 json ......

{
    "_id" : ObjectId("556717bb10e5c4a3f831dfca"),
    "Email" : "test@test.com",
    "Groups" : [ 
        {
            "GroupId" : "5641c6da134b9006dcdc0bff",
            "TenantId" : "5567179f10e5c4a3f831dfc8"
        }
    ]
}

编辑:我刚刚尝试将它作为字符串列表,但它仍然没有返回结果。我还删除了显式映射,它引发了异常。 Element 'Groups' does not match any field or property of class AssetStream.Model.Admin.User. 啊,我敢打赌这是因为没有公共二传手。

4

0 回答 0