C# MongoDb 驱动程序包含子对象
C# MongoDb driver include child object
我是 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
您可以像这样进行类型化查找>
public class Instance
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public ObjectId TemplateId { get; set; }
public Template Template { get; set; }
}
public class Template
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}
string connectionString = "mongodb://localhost:27017";
var client = new MongoClient(connectionString);
var db = client.GetDatabase("test");
var instances = db.GetCollection<Instance>("Instances");
var resultOfJoin = instances.Aggregate()
.Lookup("Templates", "TemplateId", "_id", @as: "Template")
.Unwind("Template")
.As<Instance>()
.ToList();
编辑:
由 jcruz 编辑的 Unwind 部分。
我是 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
您可以像这样进行类型化查找>
public class Instance
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public ObjectId TemplateId { get; set; }
public Template Template { get; set; }
}
public class Template
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}
string connectionString = "mongodb://localhost:27017";
var client = new MongoClient(connectionString);
var db = client.GetDatabase("test");
var instances = db.GetCollection<Instance>("Instances");
var resultOfJoin = instances.Aggregate()
.Lookup("Templates", "TemplateId", "_id", @as: "Template")
.Unwind("Template")
.As<Instance>()
.ToList();
编辑: 由 jcruz 编辑的 Unwind 部分。