我遇到这样一个情况,需要一个方法接受一个ID,在Mongo中查找该值,如果没有找到,则在假设该项不存在于本地数据库的情况下调用另一个API来获取该项。
我的问题是,集合的MongoID配置为ObjectID。 当我尝试查找无效的id时,它会抛出异常:“不是有效的24位十六进制字符串”。 另一个API期望的id格式与此不同。 有没有办法在查找之前检查id是否有效?
我知道我可以将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
吗?它返回 true,如果字符串可能是一个 ObjectId,并将解析后的 ObjectId 作为 out 参数返回。 - ScottyD0nt