我有一个简单的类,其中包含一系列文档。 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属性添加一个显式的include投影,但所有这些都是我删除所有其他属性并且仍然有一个空集合。
这是班级......
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);
});
和来自DB的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.
啊,我打赌这是因为没有公共制定者。