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"
  },
  ...
}]