我正在寻找一种将使用可读名称(“类别”)定义的 Bson 对象映射到短名称(“ct”)并限制主文档库中项目名称占用的空间的方法。我已经使用其他驱动程序看到了这一点,但是使用官方驱动程序呢?我怎么做,哪里是最好的定义。可以在查询中使用长名称并检索短内容吗?
谢谢。
我正在寻找一种将使用可读名称(“类别”)定义的 Bson 对象映射到短名称(“ct”)并限制主文档库中项目名称占用的空间的方法。我已经使用其他驱动程序看到了这一点,但是使用官方驱动程序呢?我怎么做,哪里是最好的定义。可以在查询中使用长名称并检索短内容吗?
谢谢。
由于没有人真正给出这个问题的答案,所以就在这里。
使用官方驱动程序,您可以通过使用 BsonElement 装饰属性名称来做到这一点。例如:
public class SomeClass
{
public BsonObjectId Id { get; set; }
[BsonElement("dt")]
public DateTime SomeReallyLongDateTimePropertyName { get; set; }
}
现在驱动程序将使用“dt”作为 BSON 属性名称。
但是,此时没有办法使用 POCO 属性名称进行查询。您需要在查询中使用“dt”。在提供 LINQ 样式查询功能的 C# 驱动程序之上构建了一个单独的项目,但我尚未对其进行测试以验证它是否会满足您的要求。
最好保持模型清洁。MongoDB.Driver 允许在外部进行。
BsonClassMap.RegisterClassMap<SomeClass>(x =>
{
x.AutoMap();
x.GetMemberMap(m => m.SomeReallyLongDateTimePropertyName).SetElementName("dt");
});
考虑记录
{ 姓氏:“史密斯”,最佳得分:3.9 }
字符串“last_name”和“best_score”将存储在每个对象的 BSON 中。使用较短的字符串可以节省空间:
{ lname :“史密斯”,得分:3.9 }
每个文档将节省 9 个字节。这当然会降低程序员的表达能力,除非您有一个非常关注这一点的集合,否则不建议这样做。
字段名称不存储在索引中,因为索引具有预定义的结构。因此,缩短字段名称将无助于索引的大小。一般来说,没有必要使用短字段名称。
检查源以获取更多详细信息
但另一面在著名的话题“你节省了 5 美分,你的代码不可读,恭喜! ”
我自己认为短名称是不好的方式。