Mongodb の GUID 表示の問題の詳細な分析

Mongodb の GUID 表示の問題の詳細な分析

問題を見つける

最近、プログラムのストレージを Mongodb に移行したところ、Guid 型が書き込まれた後、プログラムで読み取られたデータがクライアント ツールで表示されるデータと異なるという現象を発見しました。簡単な例は次のとおりです。

 var doc = new {_id = 1、Value = Guid.Parse("{B63932BB-9688-432B-B3A0-C4AE3FD2696A}") };
 コレクション.InsertOne(doc.ToBsonDocument());

DB に書き込んだ後、クライアント ツールからそれを表示します。

比較すると、表示された値は書き込まれた形式とは異なりますが、読み取られた値は正しいことがわかります。この質問に対する答えは、公式ドキュメントの仕様に記載されています。

公式ドキュメント: http://bsonspec.org/spec.html

Mongodb は uuid をバイナリ型として保存し、サブタイプを使用してその型を uuid としてマークします。C#、Java、Python 用に提供されているドライバーでは、サブタイプはデフォルトで 3 (レガシー UUID) にマップされ、クライアント ツールにも表示されます。

実際、ほとんどのクライアント ツールは、私たちが記述したとおりの Legacy UUID の表示もサポートしています。

回避策

これはプログラムの機能には影響しませんが、一見すると文字列が記述された形式ではないため、プログラムのデバッグに影響することがよくあります。より良い解決策は、デフォルトで標準の UUID 形式で保存することです。グローバル構成を設定するだけで済みます。

 BsonDefaults.GuidRepresentation = GuidRepresentation.Standard;

これははるかに便利です:

参考記事:

UUID データに関する MongoDB のベスト プラクティス

要約する

上記はMongodbのGUIDの表示問題についての詳細な内容です。MongodbのGUIDの表示問題についての詳細は、123WORDPRESS.COMの他の関連記事をご覧ください。

<<:  WeChatミニプログラムでのマップの正しい使用例

>>:  Linux で推奨される 9 つの優れたコード比較ツールの概要

推薦する

Vuexの特性と機能の詳細な説明

目次Vuex とは何ですか? Vuexの5つの特性vuex の State 機能とは何ですか? vu...

MySQL の従来のソート、カスタム ソート、中国語のピンイン文字によるソート

MySQL の通常のソート、カスタム ソート、中国語のピンイン文字によるソート。実際の SQL を記...

Dockerでコンテナを作成するときにコンテナIPを指定する実装例

Docker はコンテナを作成するときに、デフォルトでブリッジ ネットワークを使用し、IP アドレス...

Dockerディスク容量不足の問題を解決する

Docker が配置されているサーバーをしばらく稼働させたところ、サーバーのディスク ディレクトリの...

SQL 実装 LeetCode (185. 部門内で最も給与の高い上位 3 名)

[LeetCode] 185. 部門別給与上位3位従業員テーブルにはすべての従業員が保持されます。...

MySQL データベースの最適化: テーブルとデータベースのシャーディング操作の詳細な説明

この記事では、例を使用して、MySQL データベースの最適化のためのテーブルおよびデータベース シャ...

Vue の計算プロパティの詳細な説明

目次補間式方法計算された要約する今日は、Vue の計算プロパティについてお話ししましょう。計算プロパ...

MySQL DML ステートメントの概要

DML 操作とは、データベース内のテーブル レコードに対する操作を指し、主にテーブル レコードの挿入...

CSS で垂直方向の中央揃えを実装するいくつかの方法の概要

フロントエンドのレイアウト プロセスでは、水平方向の中央揃えを実現するのは比較的簡単で、通常は ma...

Docker+daocloudはフロントエンドプロジェクトの自動構築とデプロイを実現します

自動プロジェクト展開は大企業やユニコーン企業でよく使用され、手動でプロジェクトを展開するよりも効率的...

CSS を使用して複数の方法で等高レイアウトを実装するサンプル コード

この記事で説明する等高レイアウトでは、純粋な CSS を使用して、要素の高さを手動で設定することなく...

MySQL の大文字と小文字の区別に関する注意

目次MySQLの大文字と小文字の区別はパラメータによって制御されますMySQLの大文字と小文字の区別...

Windows 10 に Apache 2.4.41 をインストールするチュートリアル

1. Apache 2.4.41 のインストールと設定最初のステップは、以下に示すように、https...

インライン要素とブロック要素とは何ですか?

1. インライン要素はコンテンツの幅のみを占めますが、ブロック要素はコンテンツの量に関係なく行全体を...