[解決済み] ストア enum MongoDB
質問
Mongoデータベースに、各ユーザーのランク(管理者、モデレーター、ユーザー...)や実績などのenumを保存しているのですが、このenumはどのようなものですか?私の知る限り、Mongo には enum データ型がないので、他の型を使って保存する必要があります。
整数で簡単に表現できるものはすべて文字列で保存するよりも、より少ないスペースで保存できると考えています。整数を使うことのもうひとつの利点は、業績やランクの名前を変更したい場合、データベースに触れることなく簡単に変更できることです。文字列を使う利点は、データを使用する前の処理が少なくて済むことと、人間が読みやすいので、バグを追跡するのに役立つことです。
Mongo で列挙型を保存する良い方法はありますか?整数か文字列のどちらかを使うべきという強い理由はありますか? (どっちがいいかという質問は避けてください)
どのように解決するのですか?
TL;DR: 文字列は、おそらく より安全 を選択し、パフォーマンスの差は無視できるほど小さいはずです。整数値は、列挙型をインデックス化する必要がある巨大なコレクションに適しています。YMMV。
<ブロッククオート私は整数を使用してそれを格納することを考えたが、それは簡単に整数で表現できるすべてのために文字列を格納するよりも少ないスペースを使用すると仮定します
本当ですね。
整数を使うことのもうひとつの利点は、実績やランクの名前を変えたいとき、データベースに触れることなく簡単に変更できることです。
これは整数の重要な利点だと思います。しかし、そのためには、関連する値を
enum
は変更しないでください。もし、それをしくじると
ほぼ間違いなく大惨事になる
これは大きなデメリットです。
文字列を使用する利点は、データを使用する前に必要な処理が少なくて済むということです。
実際にenumデータ型を使っているのであれば、内部的には何らかの整数であるはずなので、整数の方が処理が少なくて済むはずです。いずれにせよ、そのオーバーヘッドは無視できるほど小さいはずです。
整数と文字列のどちらを使うべきかという強い理由はあるのでしょうか?
私は多くの言われたことを繰り返していますが、多分それは他の読者の助けになります。要約すると
-
enumの値マップを混同すると大混乱になる。想像してみてください。
Declined
の状態が、突然Accepted
というのもDeclined
は値 '2' を持っていましたが、現在はAccepted
列挙の順番を変えて、手動で値を割り当てるのを忘れてしまったからです... ( 震え声 ) - 文字列はより表現力が豊か
- 整数の方が容量が少ない。ディスクスペースは通常問題にはなりませんが、インデックススペースはRAMを消費し、高価になります。
- 整数の更新では、オブジェクトのサイズは変更されません。文字列は、その長さが大きく変化する場合、再割り当てが必要になることがあります。しかし、文字列のパディングとパディング係数がこれを軽減するはずです。
- 整数は、フラグ(残念ながら(まだ)クエリ可能ではありません。 SERVER-3518 )
-
整数を問い合わせるには
$gt
/$lt
を実装することで、複雑な$or
クエリで使用することができますが、これはかなり難解な要求で$or
クエリ
関連
-
[解決済み] MongoDBのデフォルトのユーザーとパスワードは何ですか?
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み] JavaScriptSerializer - 列挙型を文字列としてJSONシリアライズする
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MongoDBデータベースの名前を変更する方法とは?
-
[解決済み] MongoDB - 管理者ユーザが認証されていない
-
[解決済み] MongoDB Compass フィルタ (クエリ)
-
[解決済み] mongoimport : 'error validating settings: positional argument is only one allowed' (設定の検証エラー:位置引数は1つしか許可されません。
-
[解決済み] mongodb aggregation sort
-
[解決済み] MongoDBの命名規則とは何ですか?
-
[解決済み] SocketException: アドレスはすでに使用中です MONGODB
-
[解決済み] or' 条件を含む MongoDB クエリ
-
[解決済み] 日付に基づいたクエリを返す
-
[解決済み】MongoDBのすべてのドキュメントのフィールド名を変更するにはどうすればよいですか?