Docs Menu
Docs Home
/
MongoDB Shell
/

レガシーmongo shell との互換性の変更

項目一覧

  • 非推奨メソッド
  • 読み込み設定(read preference)の動作
  • 書込み (write preference) の動作
  • ObjectId メソッドと属性
  • Numeric Values
  • 未定義の値
  • オブジェクト引用符の動作
  • データベース呼び出しの制限
  • コマンドの例外
  • shell 構成
  • データ型
  • メソッド
  • 再試行可能な書き込み
  • レガシー出力
  • コードスニペット

このページでは、 mongoshとレガシーmongo shell の違いについて説明します。 ここにリストされている代替手段に加えて、 mongocomport mongoレガシー shell API にアクセスするためのスニペット。スニペットは実験的な機能です。詳しくは、「 スニペット 」を参照してください。

snippet install mongocompat

次の shell メソッドは、 mongoshでは非推奨です。 代わりに、 Alternative Resources列にリストされているメソッドを使用してください。

非推奨のメソッド
代替リソース
db.collection.copyTo()
集計ステージ: $out
db.collection.count()
db.collection.insert()
db.collection.remove()
db.collection.save()
db.collection.update()
DBQuery.shellBatchSize
Mongo.getSecondaryOk
Mongo.isCausalConsistency
Mongo.setSecondaryOk
rs.secondaryOk

レガシーmongo shellを使用してセカンダリレプリカセット メンバーに直接接続する場合は、セカンダリ読み取りを有効にするために mongo.setReadPref() を実行する必要があります。

mongoshを使用してセカンダリレプリカセット メンバーに直接接続する場合、次のいずれかの読み込み設定( read preference )を指定すると、そのメンバーから読み取りを行うことができます。

読み込み設定(read preference)を指定するには、次のいずれかを使用できます。

mongoshを使用してセカンダリレプリカセット メンバーに直接接続する場合、読み込み設定(read preference)がprimaryPreferredsecondary 、またはsecondaryPreferredに設定されている場合、 rs.secondaryOk()を実行する必要はありません

次のshowヘルパー メソッドでは、操作に別の読み込み設定(read preference)が指定されている場合でも、常にprimaryPreferredの読み込み設定(read preference)が使用されます。

  • show dbs

  • show databases

  • show collections

  • show tables

レガシーのmongo shell では、これらの操作は指定された読み込み設定(read preference)を使用します。

再試行可能な書込みは、 mongoshではデフォルトで有効になっています。 再試行可能な書込みは、レガシーmongo shell ではデフォルトで無効になっていました。 再試行可能な書込みを無効にするには、 --retryWrites=falseを使用します。

これらのObjectId()メソッドは、 mongoshとレガシーのmongo shell では異なる動作をします。

メソッドまたは 属性
mongo 動作
mongosh 動作
ObjectId.str
Returns a hexadecimal string:
6419ccfce40afaf9317567b7
Undefined
(Not available)
ObjectId.valueOf()
Returns the value of ObjectId.str:
6419ccfce40afaf9317567b7
Returns a formatted string:
ObjectId("6419ccfce40afaf9317567b7")
ObjectId.toString()
Returns a formatted string:
ObjectId("6419ccfce40afaf9317567b7")
Returns a hexadecimal formatted string:
6419ccfce40afaf9317567b7

レガシーのmongo shell では数値はデフォルトでdoublesとして保存されていました。 mongoshでは、数値は 32 ビット整数Int32として保存されますが、値がInt32として保存できない場合はDoubleとして保存されます。

MongoDB Shell は、 mongo shell でサポートされている数値型を引き続きサポートします。 ただし、優先されるタイプは MongoDBドライバーとより整合するように更新されています。 詳細については、「 mongosh データ型 」を参照してください。

MongoDB Shell では、数値変数に推奨される型と、レガシーのmongo shell で推奨されている型が異なります。 mongoshの型は、MongoDB ドライバーで使用される型との整合性が優れています。

mongo タイプ
mongosh タイプ
NumberInt
Int32
NumberLong
Long
NumberDecimal
Decimal128

警告

mongoshとレガシーのmongo shell の両方を使用して同じコレクションに接続すると、データ型が不整合な状態で保存される可能性があります。

Tip

以下も参照してください。

タイプの管理の詳細については、「スキーマ検証の概要 」を参照してください。

未定義のBSON型は 非推奨 です。 に未定義の JSmongosh 型のドキュメントを挿入しようとすると、配置はドキュメント内の未定義の値をBSON null 値に置き換えます。 を使用して未定義の値をデータベースに挿入する方法はサポートされていません。mongosh

例、次のコードを実行中して mongosh にドキュメントを挿入する方法を考えてみましょう。

db.people.insertOne( { name : "Sally", age : undefined } )

このコードを mongosh で実行すると、 シェルは次のドキュメントを挿入します。

{ name : "Sally", age : null }

mongosh Goドライバーやレガシーの シェルなどの他のツールを使用して保存されたBSON未定義の値は、nullmongo として表されます。

mongosh は出力でオブジェクト キーを引用せず、値に一重引用符を付けます。 キーとmongoshell string値の両方を 引用符で囲むレガシーdouble mongosh --evalの出力を再生するには、 EJSON.stringify() とともに使用します。

たとえば、次のコマンドは、 double引用符とインデントを含む test データベースの sales コレクション内のアイテムを返します。

mongosh --eval "EJSON.stringify(db.sales.findOne().toArray(), null, 2)"

出力は、次のようになります。

{
"_id": {
"$oid": "64da90c1175f5091debcab26"
},
"custId": 345,
"purchaseDate": {
"$date": "2023-07-04T00:00:00Z"
},
"quantity": 4,
"cost": {
"$numberDecimal": "100.60"
}
}

次のコンテキストでは、データベースクエリの結果を渡すことができません。

  • クラスコンストラクタ関数

  • 非同期ジェネレーター関数

  • 配列上の.sort()へのコールバック

  • クラス内の JavaScript セッター

データベース呼び出しの結果にアクセスするには、 非同期関数 を使用します 非同期ジェネレーター関数 、または.map()

次のコンストラクターは動作しません。

// This code will fail
class FindResults {
constructor() {
this.value = db.students.find();
}
}
// This code will fail
function listEntries() { return db.students.find(); }
class FindResults {
constructor() {
this.value = listEntries();
}
}

代わりに、 async関数を使用してください。

class FindResults {
constructor() {
this.value = ( async() => {
return db.students.find();
} )();
}
}

注意

非同期 JavaScript を操作する代わりに、クラス内でデータベース操作を実行するメソッドを作成することもできます。

class FindResults {
constructor() { }
init() { this.value = db.students.find(); }
}

このクラスを使用するには、まずクラス インスタンスを作成し、次に.init()メソッドを呼び出します。

次のジェネレーター関数は動作しません。

// This code will fail
function* FindResults() {
yield db.students.findOne();
}
// This code will fail
function listEntries() { return db.students.findOne(); }
function* findResults() {
yield listEntries();
}

代わりにasync generator functionを使用してください。

function listEntries() { return db.students.findOne(); }
async function* findResults() {
yield listEntries();
}

次の配列ソートは機能しません。

// This code will fail
db.getCollectionNames().sort( ( collectionOne, collectionTwo ) => {
return db[ collectionOne ].estimatedDocumentCount() - db[ collectionOne ].estimatedDocumentCount() )
} );

代わりに.map()を使用してください。

db.getCollectionNames().map( collectionName => {
return { collectionName, size: db[ collectionName ].estimatedDocumentCount() };
} ).sort( ( collectionOne, collectionTwo ) => {
return collectionOne.size - collectionTwo.size;
} ).map( collection => collection.collectionName);

この配列ソートのアプローチは、サポートされていない同等のコードよりもパフォーマンスが高いことが多い。

次の JavaScript 設定は機能しません。

// This code will fail
class TestClass {
value = 1;
get property() {
return this.value;
}
// does not work:
set property(value) {
this.value = db.test.findOne({ value });
}
}

出力に{ ok: 0 }が含まれているコマンドの場合、 mongoshは一貫した例外を返し、サーバーの未加工の出力を省略します。 レガシーのmongo shell は、コマンドごとに異なる出力を返します。

詳細については、「コマンドを実行 」を参照してください。

レガシーのmongo shell は.mongorc.jsという名前の構成ファイルを使用します。

mongoshが起動時に.mongorc.jsを見つけても.mongoshrc.jsが見つからない場合、 mongoshはレガシーの.mongorc.jsファイルをロードせず、 .mongorc.jsの名前を.mongoshrc.jsに変更する必要があると示します。

詳細については、 .mongoshrc構成ファイルを参照してください。

MongoDB は、 JSON では利用できない追加のデータ型をサポートする BSON を使用してデータを保存します。mongosh shell は、レガシーのmongo shell よりもドライバーのデータ型のサポートが優れています。

詳細については、「データ型 」を参照してください。

レガシーのmongo shell は、 load()メソッドでスクリプトのファイル名またはディレクトリにアクセスできません。

詳細については、 load() を参照してください。

デフォルトでは、再試行可能な書込みは次のとおりです。

  • で有効 mongosh

  • レガシーmongo shell では無効

再試行可能な書込みを無効にするには、 --retryWrites=falseを使用します。

詳細については、--retryWrites を参照してください。

mongosh shell は、レガシーのmongo shell とは異なる出力を返します。 レガシーのmongo shell と同様の方法で出力をフォーマットする必要があるスクリプトがある場合は、 EJSON.stringify()を使用してmongosh出力を再フォーマットしてみてください。

詳細については、レガシーtojsononeline()を参照してください。

レガシーのmongo shell ではコード スニペットの操作方法が異なります。

詳細については、「スニペットのヘルプを得る 」を参照してください。

戻る

参照