限制嵌入文档的字段
本文关键字:字段 文档 | 更新日期: 2023-09-27 18:11:10
我使用官方MongoDB c#驱动程序与我的MongoDB服务器进行通信。这是我完整的实体方案:
public class Person
{
public ObjectId _id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public DateTime DateOfBirth { get; set; }
public List<Address> Addresses { get; set; }
}
public class Address
{
public String Street { get; set; }
public String City { get; set; }
}
现在,在一些情况下,我只想得到以下返回:
public class Person_LocationOview
{
public String LastName { get; set; }
public List<Address_CityOnly> Addresses { get; set; }
}
public class Address_CityOnly
{
public String City { get; set; }
}
默认加载所有字段并自行完成映射
MongoCursor<Person>
没有意义,因为我只想加载特定的字段。在反射的帮助下,我生成要加载和发送的字段:
var fields = new { "LastName", "Addresses.City" };
MongoCollection< BsonDocument >.FindAllAs< Person_LocationOview >( )
.SetFields( fields ).ToList( );
我认为MongoDB的序列化器是智能的;但是调用返回以下错误:
先。类Models的属性City需要元素City。Address_CityOnly缺失
对这个要求有什么想法吗?
我已经更新了完整的MongoDB基础设施。现在代码可以与所有viewmodel一起工作,比如Person_LocationOview。使用完整的方案类,代码仍然崩溃,我不知道为什么。
现在,我所有的视图类都实现了自己的接口(IPartialEntityView)。在我的反射方法中获得字段名,我会检查这个继承,只有这样我才会加载"Addresses.FieldName(s)"。如果属性类型不是默认的。net类型或没有继承IPartialEntityView,我将使用完整字段"addresses"。效果很好。