MongoDB C#官方驱动程序:将对象映射到短名称以限制空间

时间:2011-02-21 17:47:36

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

我正在寻找一种方法,将使用可读名称(“类别”)定义的Bson对象映射到短名称(“ct”),并限制主文档库中项目名称占用的空间。我已经看到这个使用其他驱动程序,但如何使用官方驱动程序。我怎么做,哪里是最好的定义地点。可以在查询中使用长名并检索短内容吗?

感谢。

3 个答案:

答案 0 :(得分:20)

由于没有人真正给出问题的答案,所以就是这样。

使用官方驱动程序,您可以通过使用BsonElement修饰属性名称来完成此操作。例如:

public class SomeClass
{
    public BsonObjectId Id { get; set; }

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

现在驱动程序将使用“dt”作为BSON属性名称。

但是,此时无法使用POCO属性名称进行查询。您需要在查询中使用“dt”。有一个单独的项目构建在C#驱动程序之上,提供LINQ样式查询功能,但我没有测试它以验证它是否能满足您的要求。

答案 1 :(得分:7)

保持模特清洁更好。 MongoDB.Driver允许在外面进行。

BsonClassMap.RegisterClassMap<SomeClass>(x =>
{
     x.AutoMap();
     x.GetMemberMap(m => m.SomeReallyLongDateTimePropertyName).SetElementName("dt");
});

答案 2 :(得分:0)

考虑记录

{last_name:“Smith”,best_score:3.9}

字符串“last_name”和“best_score”将存储在每个对象的BSON中。使用较短的字符串可以节省空间:

{lname:“Smith”,得分:3.9}

每个文档可以节省9个字节。这当然会降低程序员的表达能力,除非您有一个非常值得关注的集合,否则不建议这样做。

字段名称不存储在索引中,因为索引具有预定义的结构。因此,缩短字段名称将无助于索引的大小。通常,没有必要使用短字段名称。

check来源了解更多详情

但其他方面在着名主题“You saved 5 cents, and your code is not readable, congrats!

中有所描述

我个人认为短名称是不好的方式。