Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

レガシー {0 シェル のデータ型mongoshell

警告

次のドキュメントは、mongo MongoDB Server のダウンロード に含まれる シェルに関連しています。新しいMongoDB Shell(mongosh )の詳細については、 mongoshドキュメント を参照してください。

2 つの shell の違いを理解するには、「 mongo Shell とmongoshの比較 」を参照してください。

MongoDB BSONJSONよりも追加のデータ型をサポートします。 ドライバーはホスト言語でこれらのデータ型のネイティブ サポートを提供します。また、 mongo shell は、 mongo JavaScript shell でこれらのデータ型の使用をサポートするためのいくつかのヘルパー クラスを提供します。 詳細については、拡張 JSONリファレンスを参照してください。

mongo shell には、日付を string またはDateオブジェクトとして返すさまざまなメソッドが用意されています。

  • Date() メソッド(現在の日付を文字列として返す)。

  • new Date() ISODate() ラッパーを使用して Date オブジェクトを返すコンストラクター。

  • ISODate() ISODate() ラッパーを使用して Date オブジェクトを返すコンストラクター。

内部的には、 Date オブジェクトは、UNIX エポック(1970 年 1 月 1 日)からのミリ秒数を表す符号付き 64 ビット整数として保存されます。

すべてのデータベース操作とドライバーが64 ビット範囲全体をサポートしているわけではありません。年が 0 から 9999 まで(両端を含める)の範囲内にある日付であれば安全に処理できます。

日付を文字列として返すには、次の例のようにDate() メソッドを使用します。

var myDateString = Date();

変数の値を印刷するには、次のように shell に変数名を入力します。

myDateString

結果は myDateString の値です。

Wed Dec 19 2012 01:03:25 GMT-0500 (EST)

型を確認するには、次のようにtypeof 演算子を使用します。

typeof myDateString

この操作では、string を返します。

mongo shell は、 Date型のオブジェクトをISODateヘルパーでラップします。ただし、オブジェクトはタイプDateのままになります。

次の例では、 new Date() コンストラクターと ISODate() コンストラクターの両方を使用して、 Date オブジェクトを返します。

var myDate = new Date();
var myDateInitUsingISODateWrapper = ISODate();

new 演算子は ISODate() コンストラクターでも使用できます。

変数の値を印刷するには、次のように shell に変数名を入力します。

myDate

結果は ISODate()ヘルパーでラップされたmyDateDate 値です。

ISODate("2012-12-19T06:01:17.171Z")

型を確認するには、次のようにinstanceof 演算子を使用します。

myDate instanceof Date
myDateInitUsingISODateWrapper instanceof Date

この操作では両方のtrueが返されます。

mongo shell はObjectIdデータ型を囲むObjectId()ラッパー クラスを提供します。 新しい ObjectId を生成するには、 mongo shell で次の操作を使用します。

new ObjectId

Tip

次を参照してください。

mongo shell は、デフォルトですべての数値を浮動小数点値として扱います。 mongo shell は、 64ビット整数を処理するためのNumberLong()ラッパーを提供します。

NumberLong()ラッパーは、long を string として受け入れます。

NumberLong("2090845886852")

次の例では、 NumberLong()ラッパーを使用して コレクションに書き込みます。

db.collection.insertOne( { _id: 10, calc: NumberLong("2090845886852") } )
db.collection.updateOne( { _id: 10 },
{ $set: { calc: NumberLong("2555555000000") } } )
db.collection.updateOne( { _id: 10 },
{ $inc: { calc: NumberLong("5") } } )

以下のことを確認するには、ドキュメントを取得してください。

db.collection.findOne( { _id: 10 } )

返されたドキュメントでは、 calcフィールドにNumberLongオブジェクトが含まれています。

{ "_id" : 10, "calc" : NumberLong("2555555000005") }

$incを使用してNumberLongオブジェクトを含むフィールドの値を浮動小数点数によって増加させると、データ型は次の例のように浮動小数点値に変わります。

  1. $incを使用してcalcフィールドを5ずつ増加させます。これをmongo shell は を浮動小数として扱います。

    db.collection.updateOne( { _id: 10 },
    { $inc: { calc: 5 } } )
  2. Retrieve the updated document:

    db.collection.findOne( { _id: 10 } )

    更新されたドキュメントのcalcフィールドには浮動小数点値が含まれています。

    { "_id" : 10, "calc" : 2555555000010 }

注意

NumberLong()コンストラクターはmongo shell からのinteger値を受け入れますが(つまり 引用符なしで)、これは推奨されません。 JavaScript の定義されたNumber.MAX_SAFE_INTEGER (数値2^53 - 1 )よりも大きい整数値を指定すると、予期しない動作が発生する可能性があります。

mongo shell は、デフォルトですべての数値を浮動小数点値として扱います。 mongo shell は、 32ビット整数を明示的に指定するためのNumberInt()コンストラクターを提供します。

バージョン 3.4 で追加

mongo shell は、デフォルトですべての数値を64ビット浮動小数点double値として扱います。 mongo shell は、正確な精度で小数の丸めをエミュレートできる128ビットの 10 進数ベースの浮動小数点値を明示的に指定するためのNumberDecimal()コンストラクターを提供します。 この機能は、財務、税金、科学的な計算など、金銭データを取り扱うアプリケーションを対象としています。

decimal BSON タイプは、IEEE で規定される754 10進数128浮動小数点数形式を使用し、 34桁の 10 進数( 有効桁数)および − 6143から + 6144の指数範囲をサポートしています。

NumberDecimal()コンストラクターは、 decimal値を string として受け入れます。

NumberDecimal("1000.55")

値は、 データベースに次のように保存されます。

NumberDecimal("1000.55")

NumberDecimal()コンストラクターは、 mongo shell からのdouble値も受け入れます(つまり )、精度が失われるリスクがあるため推奨されません。 コンストラクターは、10 進数ベースの パラメータのバイナリベースのdouble精度表現(精度が失われる可能性あり)を作成し、その値を15桁の精度を持つdecimal値に変換します。 次の例では、値を暗黙的にdoubleとして渡し、それが15桁の精度で作成される方法を示しています。

NumberDecimal(1000.55)

値は、 データベースに次のように保存されます。

NumberDecimal("1000.55000000000")

次の例えでは値を暗黙的にdoubleとして渡し、精度の低下がどのように発生する可能性があるかを示しています。

NumberDecimal(9999999.4999999999)

値は、 データベースに次のように保存されます。

NumberDecimal("9999999.50000000")

注意

MongoDB ドライバーdecimal データ型を使用するには、このデータ型に対応しているドライバー バージョンを必ず使用してください。

decimal型の値は実際の数値に基づいて他の数値型と比較され、並べ替えられます。 バイナリベースのdouble型の数値は、通常 10 進数ベースの値のおおよその表現であり、 decimal表現と正確に一致しない場合があるため、 decimal値の等価性をチェックする場合はNumberDecimal()コンストラクターを使用します。 numbersコレクションに次のドキュメントがある次の例を考えてみましょう。

{ "_id" : 1, "val" : NumberDecimal( "9.99" ), "description" : "Decimal" }
{ "_id" : 2, "val" : 9.99, "description" : "Double" }
{ "_id" : 3, "val" : 10, "description" : "Double" }
{ "_id" : 4, "val" : NumberLong("10"), "description" : "Long" }
{ "_id" : 5, "val" : NumberDecimal( "10.0" ), "description" : "Decimal" }

以下の表のクエリがdb.numbers.find(<query>)メソッドにプラグインされると、次の結果が返されます。

クエリ
結果

{ "val": 9.99 }

{" _id ": 2, "val": 9.99, "description": " double " }

{ "val": NumberDecimal( " 9.99 " ) }

{ "_id": 1 , "val": NumberDecimal( " 9.99 " )、"description": "Decimal" }

{ val: 10 }

{ "_id": 3, "val": 10, "description": "Double" }
{ "_id": 4, "val": NumberLong(10), "description": "Long" }
{ "_id": 5, "val": NumberDecimal( "10.0" ), "description": "Decimal" }

{ val: NumberDecimal( " 10 " ) }

{ "_id": 3, "val": 10, "description": "Double" }
{ "_id": 4, "val": NumberLong(10), "description": "Long" }
{ "_id": 5, "val": NumberDecimal( "10.0" ), "description": "Decimal" }

最初のクエリ{ "val": 9.99 }は、値のdecimal表現と等しくない9.99double表現を暗黙的に検索します。

NumberDecimal()コンストラクターは、 9.99decimal表現を持つドキュメントをクエリするために使用されます。 double型の値は、 9.99decimal表現の正確な値と一致しないため除外されます。

整数をクエリすると、すべての数値型に一致する値が返されます。 たとえば、 10double表現をクエリすると、結果には10.0decimal表現が含まれ、その逆も同様です。

decimal型をテストするには、string エイリアス"decimal"または19とともに$type演算子を使用し、 decimal型の数値コードを使用します。

db.inventory.find( { price: { $type: "decimal" } } )

フィールド型を決定するために、 shellmongoinstanceof 演算子とtypeof 演算子を提供します。

instanceof 値が何らかの型のインスタンスであるかどうかをテストするためのブール値を返します。

たとえば、次の操作は、 _idフィールドがタイプObjectIdのインスタンスであるかどうかをテストします。

mydoc._id instanceof ObjectId

この操作では、true を返します。

typeof は、フィールドの型を返します。

たとえば、次の操作は_idフィールドのタイプを返します。

typeof mydoc._id

この場合、 typeofObjectId型ではなく、より一般的なobject型を返します。

戻る

mongo shell のスクリプトの記述

項目一覧