gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:05 27 4
gpt4 key购买 nike

每当我尝试从集合中获取 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()

关于c# - 无法在 MongoDb 集合查询中将 ObjectId 反序列化为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55414899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com