【发布时间】:2020-05-13 20:13:58
【问题描述】:
我有一个方法需要接受一个 ID,在 Mongo 中查找一个值,如果没有找到,调用另一个 API 来获取该项目,假设它不存在于本地数据库中。
我遇到的问题是集合的 MongoID 配置为 ObjectID。当我尝试查找无效的 id 时,它会抛出此异常:“不是有效的 24 位十六进制字符串”。其他 API 期望的 id 格式不同。有没有办法在寻找之前检查 id 对 Mongo 的有效性?
我知道我可以将 Mongo 中的 id 更改为字符串,但为了与我们的其他集合保持一致,我不希望这样做。
集合是这样注册的:
BsonClassMap.RegisterClassMap<Foo>(cm =>
{
cm.AutoMap();
cm.MapIdMember(f => f.id)
.SetIdGenerator(StringObjectIdGenerator.Instance)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
查找(引发异常)如下所示:
await collection.FindAsync(foo => foo.id == id);
【问题讨论】:
-
你试过
ObjectId.TryParse吗?如果字符串可以是 ObjectId 以及解析的 ObjectId 作为输出参数,则返回 true。 -
@ScottyD0nt 谢谢,我不小心在这里查看mongodb.github.io/mongo-csharp-driver/2.8/apidocs/html/…,并认为该方法已被弃用。看起来它仍然在这里可用:mongodb.github.io/mongo-csharp-driver/2.7/apidocs/html/…
-
解决了这个问题。谢谢!
标签: c# mongodb asp.net-core .net-core