【问题标题】:C# class to BSON roundtripC# 类到 BSON 往返
【发布时间】:2015-05-15 00:22:06
【问题描述】:

我正在尝试使用 MongoDB 来存储我在应用程序中拥有的一些类。

我使用的代码是

string json = JsonConvert.SerializeObject(item);
BsonDocument document = BsonDocument.Parse(json);
...
await collection.InsertOneAsync(document);

这似乎工作正常。当我从 MongoDB 检索文档时,我得到一个 BsonDocument,其中添加了“_id”属性。

如何返回原始类的实例(没有 _id 属性)

【问题讨论】:

    标签: c# mongodb bson


    【解决方案1】:

    MongoDB 自动添加对象 ID (_id) 属性作为主键。这发生在您对 MongoDB 进行任何形式的插入时(无论您是导入 JSON、BSON、CSV 还是其他)

    http://docs.mongodb.org/manual/reference/object-id/

    如果您想在 C# 应用程序中解决此问题,一种选择是从 MongoDB 导出为 CSV,然后使用工具将 CSV 导入 JSON,同时选择性地避免使用 _id。不过,这似乎有点复杂。

    也许您可以只保留 _id 属性并使其成为原始 C# 类中的可选参数?你能解释一下为什么 _id 参数的存在是一个问题吗?

    【讨论】:

      【解决方案2】:

      您还可以在从数据库中读取 BsonDocument 后将 _id 字段删除:

      var document = collection.Find(new BsonDocument()).FirstAsync();
      document.Remove("_id");
      

      这只会从内存中的 BsonDocument(文档变量的值)中删除 _id,而不是从存储在数据库中的文档中删除。

      【讨论】:

        猜你喜欢
        • 2016-10-27
        • 2011-02-26
        • 1970-01-01
        • 2020-05-02
        • 2013-02-06
        • 1970-01-01
        • 2014-03-08
        • 2021-05-27
        • 2015-04-02
        相关资源
        最近更新 更多