web-dev-qa-db-ja.com

StrictモードがMongo Shellを機能しない

私は、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データ型を表現できます。

以下の間には微妙な違いがあります。

  • 拡張JSONをJavaScript表現に解析できる
  • 次に、パーサーは、拡張キー/値のペアを解釈して、NumberLong()などのJavaScriptラッパーが関連付けられたオブジェクトに追加します。 Date()

リンクした MongoDB Extended JSON ページに従って、mongoシェルは、厳密なモードの拡張JSON( JSON標準 に準拠)を解析できますが、タイプ情報の認識なし

mongo Shellやdb.eval()などの他のJSONパーサーは、厳密なモード表現をキー/値ペアとして解析できますが、タイプ情報を認識できません。

Strictモードは、データ交換形式としてのみ意図されています(たとえば、mongoexportおよびmongoimportを介してコレクションを転送する)。

mongoシェルでのクエリの場合、MongoDB拡張JSONドキュメントに記載されているように、mongo Shell Mode表現を使用する必要があります。

1
Stennie