我目前正在使用一个MongoDB
作为数据库的项目,而我遇到了一些问题,该问题涉及如何解决使模型包含一些外国文档ID并查找它们而无需回退的问题到BsonDocument
。
最初我有这个(简化的)模型类:
public class TestSession
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("taskId")]
public ObjectId? TaskId { get; set; }
}
有时我需要TaskConfiguration
引用的具体TaskId
。
在这种情况下,我使用$lookup
来解决它。
首先,我引入了一个新成员来容纳具体的TaskConfiguration
实例,将我的模型类更改为:
public class TestSession
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("taskId")]
public ObjectId? TaskId { get; set; }
[BsonIgnore]
public TaskConfiguration Task { get; set; }
}
然后我意识到,由于Task
,我猜想聚合无法反序列化已查找并解绕的BsonIgnore
值。
我找不到任何替代方法,也无法提出其他解决方案。
最后,我决定将模型类拆分为一个完全包含文档的数据库表示形式的初始类和一个包含没有Task
属性的已解析BsonIgnore
成员的派生类,以便将其分类为可反序列化。
生成的类如下:
public class TestSessionmodel
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("taskId")]
public ObjectId? TaskId { get; set; }
}
public class TestSession : TestSessionmodel
{
[BsonElement("task")]
public TaskConfiguration Task { get; set; }
}
尽管这种方法似乎可行,但我现在必须拆分所有类似的类,这不仅可能创建许多类,而且还可能使读者混淆使用哪种类。
另外,必须小心不要将派生的类存储到数据库中。
我现在的问题是,在这种情况下,我当前的方法是否确实是可行的方法?或者是否有更好/更安全的替代方法?