如何为不是我的MongoDB集合创建一个类?

时间:2015-03-02 23:28:03

标签: c# linq mongodb mongodb-query mongodb-.net-driver

我是MongoDB的新手并且遇到了一些问题。按照这个简单的指南(http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver),但我改为连接到我没有亲自创建的数据库。因此,当示例包括:

var collection = database.GetCollection<Entity>("entities");

它对我正在连接的实际数据库不起作用,因为我没有这个类。它充满了我不能猜测的类型......例如:

/* 0 */
{
  "_id" : ObjectId("54f0f990cea606d49fafd5h2"),
  "Time" : ISODate("2015-02-27T23:11:12.301Z"),
  "Timecode" : "15:11:12:18",
  "Round" : "1",
  "FighterID" : 5,
  "FighterName" : "John Doe",
  "TypeID" : 1,
  "Type" : "jab",
  "HandID" : 2,
  "Hand" : "left",
  "Force" : 0.0,
  "Velocity" : 8.0789527768068456,
  "Confidence" : 67.689217510307827,
  "ImpactType" : 1,
  "FightID" : "fea5dc60-b898-11e4-ac68-a5f571ea05d9"
}

由于班级成员相当复杂,我不知道如何上课。

我该怎么做呢?

4 个答案:

答案 0 :(得分:1)

我不知道如何使用EF和linq-to-sql来创建mongodb类。

我建议你做两件事之一,我相信第二种解决方案会更难,但更接近你的要求

1)尝试使用bsonextractelements属性来捕获所有复杂的字段

   public MyClass {
    // fields and properties
    [BsonExtraElements]
    public BsonDocument CatchAll { get; set; }
}

或者, 2)使用反射并将属性的名称以及每个属性的数据类型存储到txt文件中。然后创建你的类manullay

答案 1 :(得分:0)

问题的答案很晚,但我一直在使用this website为我生成C#类。 它的工作原理是解析提供给它的JSON数据并生成可用于反序列化所述Json的相关类。

在处理从MongoDB中获取的json时,它有几个挂断:

  • 它没有处理&#34; ObjectId&#34;如果你只使用从Mongo中提取的Json,当你点击生成时,你会得到一个初始解析错误。 但是,您可以通过删除&#34; ObjectId&#34;来轻松解决这个问题。前缀(和附带的括号)。

  • 它没有处理带有空格的Json字段名称,但它仍然可以为您生成一个类,您可以快速地修复&#34;任何间隔的字段

  • 如果你有一个Json的集合,其中包含大量的字段(IE,有些文档包含&#34; Diety&#34;字段,但有些不是),那么你需要粘贴在json对象数组中以确保生成的类覆盖所有可能的组合

  • 如上所述,如果你有一些可以为空的字段,除非你包含说明这个的Json,解析器不能知道它应该接受空值,所以确保您要么包含足够的示例来涵盖所有组合,要么准备好自己对生成的代码进行一些更改(比如在几个字段类型之后粘贴问号;)

正如我所说 - 答案非常晚,但这个问题在谷歌中出现了很多,所以我想加上这个,希望以后可以帮助其他人

答案 2 :(得分:0)

迟到的答案,但也许会有所帮助。跳过一些属性。

public class Entity
{
    [BsonId]
    public MongoDB.Bson.ObjectId _id { get; set; }

    [BsonElement("id")]
    public int Id { get; set; }

    [BsonElement("Time")]
    public DateTime Time{ get; set; }

    [BsonElement("Round")]
    public string Round{ get; set; }

    [BsonElement("Force")]
    public double? Force{ get; set; }

    [BsonElement("FightID")]
    public string FightID{ get; set; }
}

答案 3 :(得分:-1)

甚至晚于聚会,但(受Sk93的启发),我发现this websitehttp://bson2csharp.com/)都知道MongoDB BSON。