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

如何基于id批量加载MongoDB文档?C#实现相关方法求教

C# 中查询MongoDB指定ID文档并加载到列表的实现方案

前置依赖准备

首先安装MongoDB官方C#驱动NuGet包:MongoDB.Driver

基础环境初始化

先完成客户端、数据库、集合实例的初始化操作:

using MongoDB.Driver;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

// 初始化MongoDB客户端
var client = new MongoClient("你的MongoDB连接字符串");
// 获取目标数据库
var database = client.GetDatabase("你的数据库名称");
// 获取目标集合,MyModel为你自定义的文档映射类,无预定义模型可直接用BsonDocument
var collection = database.GetCollection<MyModel>("你的集合名称");

Filter过滤构造方案

方法1:强类型Filter构造器(可读性最高,推荐)

如果ID是MongoDB默认的ObjectId类型:

var targetId = new ObjectId("要查询的文档ID字符串");
var filter = Builders<MyModel>.Filter.Eq(doc => doc.Id, targetId);

如果是自定义字符串/数值类型的ID,直接传入对应值即可:

var filter = Builders<MyModel>.Filter.Eq(doc => doc.Id, "自定义ID值");

方法2:BsonDocument动态构造(适合无预定义模型的场景)

var filter = new BsonDocument("_id", new ObjectId("目标ID字符串"));

方法3:Lambda简化写法(单条件查询可直接使用)

驱动会自动解析Lambda表达式为Filter语句:

var result = await collection.Find(doc => doc.Id == targetId).ToListAsync();

查询结果加载到列表的实现

优先使用异步方法,性能表现更好:

  • 单个ID查询转列表
List<MyModel> resultList = await collection.Find(filter).ToListAsync();
  • 多个指定ID批量查询转列表
// 要查询的ID集合
var targetIdList = new List<ObjectId> { ObjectId.Parse("id1"), ObjectId.Parse("id2"), ObjectId.Parse("id3") };
var batchFilter = Builders<MyModel>.Filter.In(doc => doc.Id, targetIdList);
List<MyModel> batchResultList = await collection.Find(batchFilter).ToListAsync();
  • 同步写法(仅适合简单小场景使用)
List<MyModel> resultList = collection.Find(filter).ToList();

注意事项

自定义映射类的ID字段需要添加[BsonId]特性,确保驱动能正确映射MongoDB内置的_id字段:

public class MyModel
{
    [BsonId]
    public ObjectId Id { get; set; }
    // 其他业务字段示例
    public string Title { get; set; }
    public int Count { get; set; }
}

如果你的ID用字符串类型存储,直接把Id属性的类型改为string即可,无需做ObjectId转换。

内容的提问来源于stack exchange,提问作者sahil Malik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:24:04