11

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

谢谢。

4

3 回答 3

30

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

使用官方驱动程序,您可以通过使用 BsonElement 装饰属性名称来做到这一点。例如:

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

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

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

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

于 2011-02-22T02:54:17.333 回答
10

最好保持模型清洁。MongoDB.Driver 允许在外部进行。

BsonClassMap.RegisterClassMap<SomeClass>(x =>
{
     x.AutoMap();
     x.GetMemberMap(m => m.SomeReallyLongDateTimePropertyName).SetElementName("dt");
});
于 2015-10-13T19:51:59.893 回答
0

考虑记录

{ 姓氏:“史密斯”,最佳得分:3.9 }

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

{ lname :“史密斯”,得分:3.9 }

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

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

检查源以获取更多详细信息

但另一面在著名的话题“你节省了 5 美分,你的代码不可读,恭喜!

我自己认为短名称是不好的方式。

于 2011-02-21T18:01:56.873 回答