请告诉我如何编写MongoDB中连接两个集合的语法。我需要左侧连接集合的所有条目。如果右侧集合中没有匹配的条目,则应将其填充为空白字段。
参见下面的代码,
public class Instance
{
public long IId { get; set; }
public string Name { get; set; }
public long TemplateId { get; set; }
public Template Template { get; set; }
}
public class Template
{
public long TId { get; set; }
public string Name { get; set; }
public List<Sample> Samples { get; set; }
}
public class Sample
{
public long SId { get; set; }
public long TemplateId { get; set; }
public long SampleData { get; set; }
public string Name { get; set; }
}
我使用下面的代码进行连接整理,
var data = _mongoDatabase.GetCollection<Instance>("Instance").Aggregate()
.Lookup("Templates", "TemplateId", "TId", @as: "Template")
.Lookup("Sample", "TemplateId", "TemplateId", @as: "Template.Samples")
.Unwind("Template")
.Unwind("Template.Samples")
.As<Instance>()
.ToList();
这里发生了什么,如果示例集合中有一个文档,而模板或样本集合中没有相关的匹配文档,那么示例文档也不会出现在列表中。
我需要所有示例文档,即使没有匹配的模板或示例文档可用。
1条答案
按热度按时间wi3ka0sx1#
保留空数组-布尔值可选。
如果为true,则在路径为null、缺少或为空数组时,$unwind输出文档。
如果为false,并且path为null、缺失或为空数组,则$unwind不输出文档。
默认值为false。
https://www.mongodb.com/docs/manual/reference/operator/aggregation/unwind/#std-label-unwind-preserveNullAndEmptyArrays