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

C#中如何高效关联查询MongoDB两个集合的文档?

高效匹配MongoDB集合的方案

嘿,刚好处理过类似的场景,给你几个靠谱的高效方案,绝对比客户端foreach遍历要香太多!

方案1:使用$in批量查询(最贴合你的需求,首推)

既然你已经拿到了SmallDictionary的全量数据,那直接把所有ProductId提取出来,用MongoDB的$in查询让数据库一次性完成匹配就好——这种方式能把循环逻辑放到数据库端执行,既减少了网络往返次数,还能利用Products集合_id字段的默认索引,性能拉满。

C#代码示例

先假设你的实体类定义大概是这样:

public class SmallDictionary
{
    public ObjectId Id { get; set; }
    public string UserEmail { get; set; }
    public ObjectId ProductId { get; set; }
}

public class Product
{
    public ObjectId Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

查询代码可以这么写:

// 假设你已经获取到了smallDictionaryList(SmallDictionary的全量数据)
var productIds = smallDictionaryList.Select(sd => sd.ProductId).ToList();

// 获取Products集合实例
var productsCollection = mongoDatabase.GetCollection<Product>("Products");

// 构造过滤器:匹配_id在productIds列表中的文档
var filter = Builders<Product>.Filter.In(p => p.Id, productIds);

// 执行查询并获取结果
var matchedProducts = await productsCollection.Find(filter).ToListAsync();

这个方案的核心优势:

  • 只需要1次网络请求,避免了foreach循环带来的N次数据库调用
  • 数据库会利用_id的唯一索引快速定位匹配文档,查询效率极高
  • 代码简洁直观,后续维护成本低

方案2:使用聚合$lookup(可选,适合不想提前拉取SmallDictionary全量的场景)

如果你其实可以不用提前拉取SmallDictionary的全量数据,也可以直接在数据库层面用聚合的$lookup做关联查询,全程在数据库内完成操作,性能同样出色:

C#聚合查询示例

var smallDictCollection = mongoDatabase.GetCollection<SmallDictionary>("SmallDictionary");
var productsCollection = mongoDatabase.GetCollection<Product>("Products");

// 给SmallDictionary临时加一个属性存匹配到的Product(或者用匿名类接收结果)
var aggregationResult = await smallDictCollection.Aggregate()
    .Lookup(
        foreignCollection: productsCollection,
        localField: sd => sd.ProductId,
        foreignField: p => p.Id,
        @as: (SmallDictionary sd) => sd.MatchedProduct)
    .ToListAsync();

不过因为你已经拿到了SmallDictionary的全量数据,方案1会更贴合你的当前场景。

小提醒

  • 确保SmallDictionary.ProductId和Products._id的类型都是ObjectId,避免类型不匹配导致查询无结果
  • 如果productIds列表特别大(比如超过10万条),可以考虑分批次查询,避免单次查询的参数过大(MongoDB对$in的列表长度有默认限制,一般场景下足够用)

内容的提问来源于stack exchange,提问作者Mateusz Drygała

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:25:51