You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#测试MongoDB的Lookup关联查询,JoinResult结果始终为空

问题分析与解决

核心错误点及修复方案

  1. 集合名称参数错误
    Lookup方法的foreignCollectionName参数你填的是变量名"BuildCaseTwoCollection",但实际MongoDB中的目标集合名称是"BuildCaseTwo"(和你获取集合时传入的名称一致),这会导致驱动找不到关联集合,直接返回空的JoinResult。

  2. 实体类需包含关联结果属性
    确保ExpertCase类中定义了JoinResult属性,类型为集合类型(比如List<BuildCaseTwo>),否则MongoDB驱动无法将关联结果反序列化到对象中。

  3. 字段类型一致性检查
    确认ExpertCase和BuildCaseTwo类中的CaseID字段类型一致,从你的数据来看都是字符串类型,所以实体类中CaseID需定义为string,避免因类型不匹配导致关联失败。

修正后的代码示例

MongoClient client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("Test");
var ExpertCaseCollection = db.GetCollection<ExpertCase>("ExpertCase");
var BuildCaseTwoCollection = db.GetCollection<BuildCaseTwo>("BuildCaseTwo");

var q = ExpertCaseCollection.Aggregate()
    .Match(Builders<ExpertCase>.Filter.Eq(u => u.SelfMail, "111@yahoo.com.tw")) // 精确匹配邮箱用Eq更合适
    .Lookup(
        foreignCollectionName: "BuildCaseTwo", // 修正为实际集合名称
        localField: "CaseID",
        foreignField: "CaseID",
        @as: "JoinResult");

var lzToLost = q.ToList();

实体类示例

public class ExpertCase
{
    public ObjectId _id { get; set; }
    public string SelfMail { get; set; }
    public string ProposerMail { get; set; }
    public string CaseID { get; set; }
    public string Date { get; set; }
    // 必须定义该属性接收关联查询结果
    public List<BuildCaseTwo> JoinResult { get; set; }
}

public class BuildCaseTwo
{
    public ObjectId _id { get; set; }
    public string SelfMail { get; set; }
    public string JoinExpert { get; set; }
    public string CaseID { get; set; }
    public string CaseTiele { get; set; }
    public string Date { get; set; }
}

内容的提问来源于stack exchange,提问作者Peter Lo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:57:57