Overview
このガイドでは、Node.js ドライバーのUTF-8検証機能を有効または無効にする方法を学習できます。 UTF-8 は、ほとんどのオペレーティング システム、アプリケーション、言語文字セット間での互換性と一貫した表現を確保する文字エンコード仕様です。
検証を有効にすると、無効な UTF-8 文字を含むデータを変換しようとすると、ドライバーはエラーをスローします。 検証によりデータをチェックする必要があるため、処理のオーバーヘッドが増加します。
検証を無効にすると、アプリケーションは検証処理のオーバーヘッドを回避できますが、無効な UTF-8 データの一貫した表示は保証されません。
デフォルトでは 、ドライバーはMongoDBのデータに対して UTF- 8 検証を有効にします。MongoDBからアプリケーションに送信されたデータを解析するときに、有効な UTF- 8形式でエンコードされていない文字が受信ドキュメントをチェックします。
注意
This version of the Node.js driver automatically substitutes invalid lone surrogates with the replacement character before validation when you send data to MongoDB. Therefore, the validation only throws an error when the setting is enabled and the driver receives invalid UTF-8 document data from MongoDB.
Node.js ドライバーを使用して UTF-8 検証を設定する方法については、以下のセクションをお読みください。
UTF-8 検証設定を指定する
ドライバーが UTF- 8検証を実行するかどうかは、クライアントを作成するとき、データベースまたはコレクションを参照するとき、または CRUD 操作を呼び出すときに、オプション パラメータで enableUtf8Validation設定を定義することで指定できます。 設定を省略すると、ドライバーは UTF- 8検証を有効にします。
クライアント、データベース、コレクション、または CRUD 操作で UTF-8 検証を無効にする方法を示すコード例については、次を参照してください。
// disable UTF-8 validation on the client new MongoClient('<connection uri>', { enableUtf8Validation: false }); // disable UTF-8 validation on the database client.db('<database name>', { enableUtf8Validation: false }); // disable UTF-8 validation on the collection db.collection('<collection name>', { enableUtf8Validation: false }); // disable UTF-8 validation on a specific operation call await myColl.findOne({ title: 'Cam Jansen'}, { enableUtf8Validation: false });
enableUtf8Validationオプションが有効になっているときにアプリケーションが MongoDB から無効な UTF-8 を読み取った場合、次のメッセージを含むBSONErrorがスローされます。
Invalid UTF-8 string in BSON document
検証スコープの設定
enableUtf8Validation設定は、それを含めたオブジェクト インスタンスのスコープと、そのインスタンスで 呼び出しによって作成された他のオブジェクトに自動的に適用されます。
たとえば、データベース オブジェクトをインスタンス化するために呼び出しに オプションを含めると、そのオブジェクトから構築されるすべてのコレクション インスタンスが 設定を継承します。 そのコレクション インスタンスで呼び出す操作も、 設定を継承します。
const database = client.db('books', { enableUtf8Validation: false }); // The collection inherits the UTF-8 validation disabled setting from the database const myColl = database.collection('mystery'); // CRUD operation runs with UTF-8 validation disabled await myColl.findOne({ title: 'Encyclopedia Brown' });
オブジェクト インスタンスを構築するとき、または操作を呼び出すときに含めることで、任意のレベルの 設定を上書きできます。
たとえば、コレクション オブジェクトの検証を無効にすると、そのコレクションの個々の CRUD 操作呼び出しの設定を上書きできます。
const collection = database.collection('mystery', { enableUtf8Validation: false }); // CRUD operation runs with UTF-8 validation enabled await myColl.findOne({ title: 'Trixie Belden' }, { enableUtf8Validation: true }); // CRUD operation runs with UTF-8 validation disabled await myColl.findOne({ title: 'Enola Holmes' });