【发布时间】:2019-10-30 12:48:05
【问题描述】:
我是 Mongo 的新手,有一个项目使用 C# MongoDb driver 和 Linq 从 MongoDb 检索数据。
我有一个名为 Instance 的对象,我可以从 Mongo 集合中检索到它。但是,对象的Template 属性属于单独的集合,在查询Instance 集合时为null。我想在查询实例时预先加载模板数据。
这相当于 Entity Framework 的 Include 方法,它急切地加载相关实体。我已经在网上搜索了使用 C# Mongo 驱动程序的等效方法,但没有运气。
如何使用 C# MongoDb 驱动程序和 Linq 完成此操作?
public class Instance
{
public int Id { get; set; }
public string Name { get; set; }
public int? TemplateId { get; set; }
public Template Template { get; set; }
}
public class Template
{
public int Id { get; set; }
public string Name { get; set; }
}
var collection = MongoDatabase.GetCollection<Instance>("Instances").AsQueryable()
var instance = collection.First(i => i.Id == 1);
var template = instance.Template; //always null
【问题讨论】:
-
如何检索
instances收藏? -
@dododo 我已经更新了帖子,我用它来获取收藏:
MongoDatabase.GetCollection<Instance>("Instances").AsQueryable() -
由于
Template是一个单独的集合,你需要使用lookup作为你的目标:stackoverflow.com/questions/35638372/… -
@dododo 同意。但是,这是投影到匿名类型。 mongodb.github.io/mongo-csharp-driver/2.2/reference/driver/crud/… 我需要将数据作为
Instance类型返回(在这种情况下)。我希望有一些更灵活的东西也可以用于其他不同类型的集合(例如 Order => OrderDetail),而无需手动预测。
标签: c# mongodb linq mongodb-.net-driver