読み取り可能な名前 (「category」) を使用して定義された Bson オブジェクトを短い名前 (「ct」) にマップし、メイン ドキュメント ベースのアイテム名が占めるスペースを制限する方法を探しています。他のドライバーを使用してこれを見たことがありますが、公式のドライバーを使用する場合はどうでしょうか。どのように私は作ることができますか、定義するのに最適な場所はどこですか. クエリで長い名前を使用して、短い内容を取得できますか?.
ありがとう。
読み取り可能な名前 (「category」) を使用して定義された Bson オブジェクトを短い名前 (「ct」) にマップし、メイン ドキュメント ベースのアイテム名が占めるスペースを制限する方法を探しています。他のドライバーを使用してこれを見たことがありますが、公式のドライバーを使用する場合はどうでしょうか。どのように私は作ることができますか、定義するのに最適な場所はどこですか. クエリで長い名前を使用して、短い内容を取得できますか?.
ありがとう。
誰も実際に質問に答えていないので、ここにあります。
公式ドライバーでは、プロパティ名を BsonElement で装飾することでこれを行うことができます。例えば:
public class SomeClass
{
public BsonObjectId Id { get; set; }
[BsonElement("dt")]
public DateTime SomeReallyLongDateTimePropertyName { get; set; }
}
これで、ドライバーは BSON プロパティ名として「dt」を使用します。
ただし、現時点では、POCO プロパティ名を使用してクエリを実行する方法はありません。クエリで「dt」を使用する必要があります。LINQ スタイルのクエリ機能を提供する C# ドライバーの上に構築された別のプロジェクトがありますが、要求どおりに動作するかどうかを確認するためにテストしていません。
レコードを検討する
{ last_name : "スミス", best_score: 3.9 }
文字列「last_name」と「best_score」は、各オブジェクトの BSON に格納されます。短い文字列を使用すると、スペースが節約されます。
{ lname : "スミス", スコア : 3.9 }
ドキュメントごとに 9 バイト節約できます。もちろん、これはプログラマーの表現力を低下させるため、これが重要なコレクションを持っていない限り、お勧めできません。
インデックスには事前定義された構造があるため、フィールド名はインデックスに格納されません。したがって、フィールド名を短くしても、インデックスのサイズには役立ちません。通常、短いフィールド名を使用する必要はありません。
詳しくはソースをチェック
しかし、反対側は有名なトピックで説明されています。
そして、短い名前は悪い方法であるという私自身の意見。