Skip to main content
 首页 » 编程设计

c#之无法在 MongoDb 集合查询中将 ObjectId 反序列化为 String

2024年01月26日35jirigala

每当我尝试从集合中获取 ID 列表时:

var messages = db.GetCollection<MessageExchange>(collectionName); 
var ids = messages 
   .AsQueryable() 
   .Where(_=> true) 
   .Select(x => x.Id) 
   .ToList(); 

我遇到了转换错误:

System.FormatException HResult=0x80131537 Message=Cannot deserialize a 'String' from BsonType 'ObjectId'. Source= StackTrace:

我无法修改类的定义,因为它在我无法更改的包中实现。因此解决方案:

[BsonRepresentation(BsonType.ObjectId)]  

在上面,不可能。基于this .

是否可以在 Linq 查询中转换它?

请您参考如下方法:

不,因为db.GetCollection<MessageExchange>将集合定义为强类型对象,驱动程序将结合执行的任何进一步逻辑(使用 linq 或其他方式)对其进行处理。

您最好的选择是:

  1. 在您自己的代码中定义一个与您的 Mongo 集合兼容的类,然后使用该类反序列化您的结果 db.GetCollection<MyCustomMessageExchange>然后您可以将其与上面的 linq 查询一起使用以仅选择 ID。

  2. 只需使用默认值 BsonDocument定义您的集合并使用投影: db.GetCollection<BsonDocument>.Find(new BsonDocument()).Project("{_id: 1}").ToList()