私は、mongo Shellクエリの厳密モードをテストする過程でテストしていました。これは link です。サンプル文書は次のようになります-
{ "_id" : ObjectId("19876"), "ip" : "127.0.0.1", "pgDownloadTime" : NumberLong(25000), "domain" : "test.domain.com", "pgAccessTime" : NumberLong("1469422166381"), "pgAccessMin" : NumberLong(1469422140), "pgAccessHour" : NumberLong(1469421000), "contentType" : 1, "tags" : [ "testTag1", "testTag2" ], "catIds" : [ "cat1", "cat2" ]
ストリクトモードを使用したクエリは-
db.testData.find({"pgAccessMin":{"$ gte":{"$ numberLong": "1469406600"}、 "$ lt":{"$ numberLong": "1469413800"}}、 "domain": " test.domain.com "})
厳密モードを使用しないクエリは-
db.testData.find({"pgAccessMin":{"$ gte":1469406600、 "$ lt":1469413800}、 "domain": "test.domain.com"})
問題は、厳密モードのクエリでは結果が提供されないが、厳密モードのないクエリではデータが提供されることです。私はmongoバージョンを使用しています-3.2.7
MongoDB拡張JSON形式では、標準JSONの一部ではない追加のBSONデータ型を表現できます。
以下の間には微妙な違いがあります。
NumberLong()
などのJavaScriptラッパーが関連付けられたオブジェクトに追加します。 Date()
リンクした MongoDB Extended JSON ページに従って、mongo
シェルは、厳密なモードの拡張JSON( JSON標準 に準拠)を解析できますが、タイプ情報の認識なし:
mongo
Shellやdb.eval()
などの他のJSONパーサーは、厳密なモード表現をキー/値ペアとして解析できますが、タイプ情報を認識できません。
Strictモードは、データ交換形式としてのみ意図されています(たとえば、mongoexport
およびmongoimport
を介してコレクションを転送する)。
mongo
シェルでのクエリの場合、MongoDB拡張JSONドキュメントに記載されているように、mongo Shell Mode
表現を使用する必要があります。