C# 如何在.NET MongoDb驱动程序中解析动态类型的ObjectId
这是我的密码C# 如何在.NET MongoDb驱动程序中解析动态类型的ObjectId,c#,mongodb,.net-core,C#,Mongodb,.net Core,这是我的密码DbContext.Resources是IMongoCollection,因为它是高度非结构化的 var resource = await DbContext.Resources.Find( Builders<dynamic>.Filter.Eq("_id", ObjectId.Parse(id)) ).SingleAsync(); 解析此\u id的最佳实践是什么?表示和构造对象id有多种方法。从您的IMongoCollection返回的对象对应于您在数据库中看到
DbContext.Resources
是IMongoCollection
,因为它是高度非结构化的
var resource = await DbContext.Resources.Find(
Builders<dynamic>.Filter.Eq("_id", ObjectId.Parse(id))
).SingleAsync();
解析此
\u id
的最佳实践是什么?表示和构造对象id有多种方法。从您的IMongoCollection
返回的对象对应于您在数据库中看到的实际\u id
值,该值是使用构造函数编码的,可以看到并由以下字段组成:
时间戳
(int)
machine
hash(int)
pid
(短)
增量
(int)
ObjectId
应该实现一个方法,允许您将对象转换为其字符串表示形式,但是如果由于某种原因,由于动态键入而无法使用它,您可以使用构造函数创建一个新的对象,或者利用该方法,这将允许您转换回时间戳
,machine
、pid
和increment
组成一个字节数组,该数组也可用于创建ObjectId
。有多种方法来表示和构造ObjectId
。从您的IMongoCollection
返回的对象对应于您在数据库中看到的实际\u id
值,该值是使用构造函数编码的,可以看到并由以下字段组成:
时间戳
(int)
machine
hash(int)
pid
(短)
增量
(int)
ObjectId
应该实现一个方法,允许您将对象转换为其字符串表示形式,但是如果由于某种原因,由于动态键入而无法使用它,您可以使用构造函数创建一个新的对象,或者利用该方法,这将允许您转换回时间戳
,machine
、pid
和increment
放入一个字节数组,该数组也可用于创建ObjectId
。我可以问这个问题吗?您是否使用c#驱动程序附带的BSON库为您处理所有的ser/deser?是的,我使用的是v=2.4.3唯一的问题是我没有任何注释。类型是动态的。没有类。解析该id的原因是什么?是否要将其用作应用程序逻辑的主键?该集合中的对象没有自己的唯一键吗?为了简单起见,当我可以返回{{u id:{$oid:'guid'}时,为什么要返回{u id:'guid'}。对象中还会有其他内容吗?为什么要制作一个复杂的api,让开发人员难以使用?我可以问这个问题吗?您是否使用c#驱动程序附带的BSON库为您处理所有的ser/deser?是的,我使用的是v=2.4.3唯一的问题是我没有任何注释。类型是动态的。没有类。解析该id的原因是什么?是否要将其用作应用程序逻辑的主键?该集合中的对象没有自己的唯一键吗?为了简单起见,当我可以返回{{u id:{$oid:'guid'}时,为什么要返回{u id:'guid'}。对象中还会有其他内容吗?为什么要制作一个复杂的api,让开发人员难以使用?在一个有大量结果的查询中,有没有最好的方法来处理这个问题。我担心如果我对1000条记录单独调用.ToString(),会出现严重的性能问题。在查看了多个资源后,我会说推荐的方法是使用注释。因为这在你的情况下是不可能的,我会做一个小包装函数,负责迭代你的集合,并对每个项目执行ToString
。1000项远远低于该点性能将是一个问题。在具有大量结果的查询中,是否有处理此问题的最佳方法。我担心如果我对1000条记录单独调用.ToString(),会出现严重的性能问题。在查看了多个资源后,我会说推荐的方法是使用注释。因为这在你的情况下是不可能的,我会做一个小包装函数,负责迭代你的集合,并对每个项目执行ToString
。1000个项目远远低于这一点,性能将是一个问题。
[{
"_id": {
"timestamp":1487967980,
"machine":614561,
"pid":30862,
"increment":16022269,
"creationTime":"2017-02-24T20:26:20Z"
},
...
}]