我正在寻找一种方法,将使用可读名称(“类别”)定义的Bson对象映射到短名称(“ct”),并限制主文档库中项目名称占用的空间。我已经看到这个使用其他驱动程序,但如何使用官方驱动程序。我怎么做,哪里是最好的定义地点。可以在查询中使用长名并检索短内容吗?
感谢。
答案 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!”
中有所描述我个人认为短名称是不好的方式。