在mongoDB中连接两个文档,即使在正确连接的集合中没有条目

yzuktlbb  于 2023-01-04  发布在  Go
关注(0)|答案(1)|浏览(146)

请告诉我如何编写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();

这里发生了什么,如果示例集合中有一个文档,而模板或样本集合中没有相关的匹配文档,那么示例文档也不会出现在列表中。
我需要所有示例文档,即使没有匹配的模板或示例文档可用。

wi3ka0sx

wi3ka0sx1#

保留空数组-布尔值可选。
如果为true,则在路径为null、缺少或为空数组时,$unwind输出文档。
如果为false,并且path为null、缺失或为空数组,则$unwind不输出文档。
默认值为false。
https://www.mongodb.com/docs/manual/reference/operator/aggregation/unwind/#std-label-unwind-preserveNullAndEmptyArrays

相关问题