如何在.NET MongoDb驱动程序中解析动态类型的ObjectId

时间:2017-05-19 13:49:34

标签: c# mongodb .net-core

这是我的代码。 DbContext.ResourcesIMongoCollection<dynamic>,因为它非常非结构化。

var resource = await DbContext.Resources.Find(
  Builders<dynamic>.Filter.Eq("_id", ObjectId.Parse(id))
).SingleAsync();

结果resource对象是

[{
  "_id": {
    "timestamp":1487967980,
    "machine":614561,
    "pid":30862,
    "increment":16022269,
    "creationTime":"2017-02-24T20:26:20Z"
  },
  ...
}]

解析此_id的最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

有多种方式来表示和构建ObjectId。从IMongoCollection返回的对象对应于您在数据库中看到的实际_id值,该值使用可以看到here的构造函数进行编码,并由以下字段组成:< / p>

  • timestamp(int)
  • machine hash(int)
  • pid(简称)
  • increment(int)

ObjectId应该实现ToString方法,允许您将对象转换为字符串表示形式,但如果由于某种原因您无法使用动态类型,那么可以使用构造函数创建一个新方法,也可以使用ObjectId.Pack方法,这样您就可以转换回timestampmachinepid和{{1} }到一个字节数组,也可以用于increment创建。