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

如何在MongoDB .NET中通过LINQ实现含嵌入字符串数组的关联查询?

使用MongoDB .NET Driver通过LINQ查询获取包含分类详情的产品

当然可以用LINQ实现这个需求!在MongoDB .NET Driver中,我们可以借助Lookup操作(对应MongoDB原生的$lookup聚合阶段)来关联Product和Categories集合,再通过LINQ语法完成投影,最终得到包含完整分类详情的产品列表。

第一步:定义实体类

首先我们需要对应MongoDB集合的实体,以及用于返回结果的DTO(因为原始Product的Categories是字符串数组,我们需要转换成分类对象集合):

// 对应Categories集合的实体
public class Category
{
    [BsonId]
    public string Id { get; set; }
    public string Name { get; set; }
}

// 对应Products集合的原始实体
public class Product
{
    [BsonId]
    public string Id { get; set; }
    public string Title { get; set; }
    public List<string> Categories { get; set; }
}

// 用于返回最终结果的DTO,包含完整分类信息
public class ProductWithCategoriesDto
{
    public string Id { get; set; }
    public string Title { get; set; }
    public List<Category> Categories { get; set; }
}

第二步:编写LINQ查询

接下来就可以用LINQ的聚合语法来关联集合并投影结果了:

// 初始化MongoDB客户端和集合
var mongoClient = new MongoClient("你的MongoDB连接字符串");
var database = mongoClient.GetDatabase("你的数据库名称");

var productsCollection = database.GetCollection<Product>("Products");
var categoriesCollection = database.GetCollection<Category>("Categories");

// 执行关联查询并投影成目标DTO
var productsWithCategories = productsCollection.Aggregate()
    .Lookup(
        foreignCollection: categoriesCollection,
        localField: p => p.Categories, // 产品里的分类ID数组
        foreignField: c => c.Id,       // 分类文档的ID
        @as: (ProductWithCategoriesDto p) => p.Categories // 关联后填充到DTO的Categories属性
    )
    .Project(p => new ProductWithCategoriesDto
    {
        Id = p.Id,
        Title = p.Title,
        Categories = p.Categories
    })
    .ToList();

关键说明

  • Lookup操作会自动匹配Product中Categories数组里的每个ID和Category集合中的Id字段,把匹配到的分类文档一次性嵌套到结果中。
  • 这里使用DTO是为了和原始Product实体区分开,如果你只是临时使用结果,也可以换成匿名类型,但DTO更利于后续业务逻辑的复用和维护。
  • 执行ToList()后,得到的结果就是你期望的包含完整分类详情的产品列表。

内容的提问来源于stack exchange,提问作者Oğuz KURTCUOĞLU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:51