MongoSQL エラー
このドキュメントでは、MongoDB MongoSQL コンパイラーのエラーについて説明します。 具体的には、このドキュメントでは、エラー コード、エラーの意味、各エラーに一般的な原因、およびエラーの解決策(自己修正が可能な場合)について説明します。 各エラーの種類(スキーマ、パーサー、アルゴリズム)は、個別のセクションで詳細に説明されます。
から始まるエラー コードの概要
SQL クエリがデータをクエリするデータソース(コレクション)のスキーマを処理中に問題が発生した場合、次のエラーが発生します。 このようなエラーは、データ型を誤った方法または無効な方法で使用している場合に多く発生します。
エラー コード | エラーの説明 |
---|---|
関数(例: Sin、値、丸め)の引数の数が正しくありません。 | |
指定された操作(例: Sub、And、Substring)の引数が正しくありません(例: string、int)。 | |
集計に提供される引数は、それ自体と同等の型ではありません。 | |
COUNT(DISTINCT *) はサポートされていません。 | |
指定された比較操作(例: Lte、されると)は、オペランドの型が比較できないため、実行できませんでした(例: int を string と比較する)。 | |
フィールドが見つからない(存在しない可能性がある)ため、フィールドにアクセスできません。 | |
サブクエリの結果セットの 濃度 は 1 より大きい場合があります。 結果セットの濃度は 0 または 1 である必要があります。 | |
指定されたキーは、それ自体と比較できないタイプであるため、ソートできません。 | |
指定されたキーはそれ自体と比較できないタイプであるため、グループ化できません。 | |
UNIXインデックス名が既存のフィールド名と競合します。 | |
指定されたデータベース内のコレクションが見つかりませんでした。 | |
比較操作で拡張 JSON が検出されました。 MongoSQL は、拡張 JSON との直接比較をサポートしていません。 代わりにキャストを使用してください(例については「解決ステップ」を参照してください)。 | |
フィールドの BSON type がサポートされていない。 | |
バイナリ データ型のフィールドに、サポートされていないサブタイプの uuid old があります(サブタイプ3 )。 |
から始まるエラー コードの概要
SQL クエリの解析(解釈)中に問題が発生した場合、次のエラーが発生します。 このタイプのエラーは、クエリ構文が有効ではないため、クエリを解析できず、失敗します。 解析エラーを解決するには、SQL クエリ構文を修正する必要があります。
3 から始まるエラー コードの概要
SQL クエリを MQL に変換するときに、引数のカウントが正しくない、フィールド参照やデータソースが見つからないなど、何らかの問題が発生した場合は次のエラーが発生します。
エラー コード | エラーの説明 |
---|---|
複数の値を持つ SELECT リストには、名前空間以外の * を含めることはできません(つまり、 SELECT a, *, b FROM myTable はサポートされていません)。 非名前空間* は単独で使用する必要があります。 | |
配列データソースには識別子が含まれています。 配列データソースは定数である必要があります。 | |
SELECT SELECTは許可されていません。 | |
個別の UNION は許可されていません。 | |
SELECT リストで参照されるデータソースが見つかりませんでした。 | |
どのデータソースにも フィールドが見つかりませんでした。 | |
フィールドは複数のデータソースに存在し、あいまいです。 | |
* 引数は COUNT 集計関数でのみ有効です。 | |
集計関数がスカラー位置で使用されました。 | |
スカラー関数が集計位置で使用されました。 | |
非集計式が GROUP BY 集計関数リストに見つかりました。 | |
集計関数の引数は 1 つだけです。 | |
スカラー関数は Distinguished をサポートしていません。 | |
派生データソースには重複するフィールドがあります。 | |
OUTER JOIN に JOIN 条件がありません。 OUTER JOIN では JOIN 条件を指定する必要があります。 | |
フィールドが重複しているため、スキーマ環境を作成できませんでした。 | |
サブクエリ式の 1 度 が必要です。 | |
ドキュメントには、同じ名前の複数のフィールドがあります。 | |
同じ FLATTEN オプションが複数回定義されている。 | |
データソースをフラット化するには、スキーマ情報が不十分です。 | |
スキーマ内のフィールドは多形オブジェクトタイプ(つまり、 document またはint のいずれかである可能性のあるフィールドを考慮してください)であるため、フラット化することはできません。 null とmissing のオブジェクト多形データが許可されています。 | |
同じ UNIX オプションが複数回定義されている。 | |
UNIX には path オプションがありません。 UNIX では PATH オプションを指定する必要があります。 | |
UNIX パス オプションは識別子ではありません。 UNIX パス オプションは識別子である必要があります。 | |
CAST のターゲット型は無効な型(つまり、不明な型または MongoDB がキャストをサポートしていない型)です。 | |
ソートキーは複雑な式を使用しているため無効です(つまり、 ORDER BY {'a': b}.a は無効です)。 |
から始まるエラー コードの概要
$sql 集計を使用する際に includeNamespaces オプションを使用しているときに問題が発生した場合、次のエラーが発生します。
エラー コード | エラーの説明 |
---|---|
フィールド名が競合するため、名前空間されていない結果セットは返されません。 |
エラー 1001
説明:関数(例: Sin、値、丸め)の引数の数が正しくありません。
一般的な原因:関数に余計な引数があるか、引数が欠落している。 たとえば、
a
がint
であるSELECT ROUND(a,1,5) FROM foo
では、ROUND には追加の引数があります。解決手順:エラーメッセージは、どの関数が間違った数の引数を持っているか、またどの関数が持つ必要があるかを示します。 この情報を使用してクエリを修正します。 修正されたサンプルクエリ:
SELECT ROUND(a,1) FROM foo
。
エラー 1002
説明:指定された操作(例: Sub、And、Substring)の引数が正しくない型(例: string、int)です。
一般的な原因:指定された関数で間違った型のフィールドが使用されました。 たとえば、
str
が string 型である場合、SELECT ROUND(str,5) FROM foo
ではこのエラーが発生します。解決手順:エラーメッセージは、どの関数が間違った型の引数を持っているか、および期待される型が何であるかを示します。 この情報を使用してクエリを修正します。 修正されたサンプルクエリ:
SELECT ROUND(a,5) FROM foo
で、a
はint
です。
エラー 1003
説明:集計に提供される引数は、それ自体と同等の型ではありません。
- 一般的な原因:集計しようとしている列のタイプが
object
またはarray
のいずれかであり、これらは単独と同等ではありません。 - たとえば、
obj
がobject
であるSELECT * FROM myCol GROUP BY a AGGREGATE MIN(obj) as min
では、このエラーが発生します。
- 一般的な原因:集計しようとしている列のタイプが
解決手順:適切なタイプの列でのみ、Aggregate 関数を使用します。
array
またはobject
内の値を集計する場合は、UNWindows または FLATTEN データソース キーワードを使用します。 修正されたサンプルクエリ:SELECT * FROM myCol GROUP BY a AGGREGATE MIN(a) as min
で、a
はint
です。
エラー 1004
説明:
COUNT(DISTINCT *)
はサポートされていません。一般的な原因:
COUNT(DISTINCT *)
(SELECT COUNT(DISTINCT *) FROM foo
)の使用はサポートされていません。解決手順:クエリから
COUNT(DISTINCT *)
の使用をすべて削除します。
エラー 1005
説明:指定された比較操作(例: Lte、されると)は、オペランドの型が比較できないため、実行できませんでした(つまり、int を string と比較する)。
一般的な原因:指定された比較操作で 2 つの異なる型のフィールドが使用されました。 たとえば、
SELECT * FROM foo WHERE a <= b
では、a
はint
で、b
はstring
です。 また、objects
とarrays
は同等の型ではなく、比較操作で使用できないことにも注意してください。解決手順:エラーメッセージは、どの比較操作が競合するタイプがあるかを示します。 この情報を使用してクエリを修正します。 修正されたサンプルクエリ:
SELECT * FROM foo WHERE a1 <= a2
(a1
とa2
は両方ともタイプint
です)。
エラー 1007
説明:フィールドが見つからない(存在しない可能性が高い)ため、フィールドにアクセスできません。
一般的な原因:存在しないフィールドにアクセスしようとしているとき たとえば、
f
が存在しないフィールドである場合、SELECT foo.f FROM foo
ではこのエラーが発生します。解決手順:可能な場合、エラーメッセージは、入力対象である可能性のある類似のフィールド名を提案します。 ただし、同様のものが見つからない場合、MongoSQL はフィールド名の提案を提供しません。 この情報を使用してクエリを修正します。 修正されたサンプル クエリ:
SELECT foo.a FROM foo
で、a
はfoo
のa
フィールドとして存在します。
エラー 1008
説明:スカラー サブクエリの結果セットの 濃度 は 1 より大きい場合があります。 結果セットの濃度は 0 または 1 である必要があります。
一般的な原因:スカラー サブクエリでは複数のドキュメント(または SQL の行)が返される場合があります。 たとえば、
SELECT (SELECT a FROM foo) FROM bar
ではこのエラーが発生します。これは、(SELECT a FROM foo)
が 1 つ以上のドキュメント(または行)を返す可能性があるためです。解決手順:サブクエリに
LIMIT 1
を追加して、1 つのドキュメント/行のみが返されるようにします。 サンプル クエリを修正します:SELECT (SELECT a FROM foo LIMIT 1) FROM bar
。
エラー 1010
説明:指定されたキーは、それ自体と比較できないタイプであるため、ソートできません。
一般的な原因:ソートしようとしている列のタイプが
object
またはarray
のいずれかである。これらは単独と同等のタイプではありません。 たとえば、obj
がobject
であるSELECT * FROM foo ORDER BY obj
では、このエラーがスローされます。解決手順:適切なタイプの列のみをソートします。
array
またはobject
内の値を使用して並べ替える場合は、UNWindows または FLATTEN データソース キーワードを使用します。 修正されたサンプルクエリ:SELECT * FROM foo ORDER BY a
で、a
はint
です。
エラー 1011
説明:指定されたキーは、それ自体と比較できないタイプであるため、グループ化できません。
一般的な原因:グループ化しようとしている列のタイプが
object
またはarray
のいずれかであるため、これらは自分自身と同等のタイプではありません。 たとえば、obj
がobject
であるSELECT * FROM foo GROUP BY obj
では、このエラーがスローされます。解決手順:適切なタイプの列のみをグループ化します。
array
またはobject
内の値でグループ化する場合は、UNWindows または FLATTEN データソース キーワードを使用します。 修正されたサンプルクエリ:SELECT * FROM foo ORDER BY a
で、a
はint
です。
エラー 1014
説明: UNIXインデックス名が既存のフィールド名と競合します。
一般的な原因: IDEX 名が既存のフィールド名と同じである。 たとえば、コレクション
foo
にフィールドb
がある場合、クエリSELECT * FROM UNWIND(foo WITH PATH => a, INDEX => b)
はこのエラーを発生させます。解決手順: IDEX 名を既存のフィールド以外のものに変更します。 修正されたサンプル クエリ:
SELECT * FROM UNWIND(foo WITH PATH => a, INDEX => b2)
で、b2
は既存のフィールド名ではありません。
エラー 1016
説明:指定されたデータベース内のコレクションが見つかりません。
一般的な原因:間違ったデータベースを検索しているか、コレクションが見つからない原因となっている入力ミスを行った可能性があります。 たとえば、コレクション
baz
が存在しない場合、クエリSELECT * FROM baz
によってこのエラーが発生します。解決手順:すべてが正しくスペルされていること、および正しいデータベースを検索していることを確認します。 修正されたサンプル クエリ:
SELECT * FROM foo
のうち、foo
が現在のデータベースに存在する。
エラー 1017
説明:比較操作で拡張 JSON が検出されました。 MongoSQL は、拡張 JSON との直接比較をサポートしていません。 代わりにキャストを使用してください(例については「解決ステップ」を参照してください)。
一般的な原因:クエリで拡張 JSON を使用し、それが正しいデータ型に暗黙的にキャストされると想定している場合 たとえば、クエリ
select _id from customers where _id = '{"$oid":"5ca4bbcea2dd94ee58162a6a"}'
は、拡張 JSON string が暗黙的にObjectID
にキャストされると考えるため、クエリを記述できます。 ただし、これは当てはまりません。解決手順:拡張 JSON 形式を使用せず、常に明示的に CAST を使用します。 エラーメッセージは、する必要があること(キャスト)を推奨しようとします。 修正されたサンプルクエリ:
select _id from customers where _id = CAST('5ca4bbcea2dd94ee58162a6a' as ObjectID)
。 このクエリは、ObjectID
に明示的にキャストします。
エラー 1018
説明:フィールドの BSON type はサポートされていません。
一般的な原因:フィールドの BSON 型が MongoDB ではサポートされていない。 たとえば、コレクション
foo
のフィールドb
がタイプundefined
の場合、クエリSELECT * FROM foo
はこのエラーを発生します。解決手順: BSON タイプを MongoSQL でサポートされているものに変更します。 エラーメッセージは 、サポートされている BSON types を 提案しています 。修正されたサンプルクエリ:
SELECT * FROM foo
では、foo
が現在のデータベースに存在し、b
がタイプundefined
ではありません。
エラー1019
説明:バイナリ データ型のフィールドに、サポートされていないサブタイプの uuid old があります。
一般的な原因:過去に、さまざまなドライバーが異なるバイト順を使用して UUID を記述していました これは、サポートされなくなった uuid 型を使用してドライバーによって書き込まれた古いデータで発生する可能性があります。
解決手順:このデータのクエリは、Atlas SQL ではサポートされていません。
エラー 2000
説明:このエラーは、認識されないトークンを除くすべてのパーサー エラーのキャッチすべてです。
一般的な原因:このエラーはキャッチル エラーであるため、さまざまな問題を意味する可能性があります。 ただし、通常、一部のトークン(キーワード)が誤って使用されたことを意味します。
解決手順:このエラーではいくつかの異なるメッセージが表示される可能性があるため、それらのメッセージに注意することが重要です。 さらに、入力クエリを調べて、すべての句(および SQL ステートメント全体)が ガイドラインの指定に従って記述されていることを確認することをお勧めします。
エラー 2001
説明:予期しないトークンまたは認識されないトークンが発生しました。
一般的な原因:スペルが間違ったり、間違った順序や形式で配置されたりしている可能性があります。 たとえば、
SELECT ** FROM foo AS f
では**
型が原因でこのエラーが発生します。解決手順:すべてに正しくスペルがあり、正しい順序および形式で配置されていることを確認します。 さらに、このエラーは、配置する必要があった可能性のあるトークンのリストを提案します。 修正されたサンプルクエリ:
SELECT * FROM foo AS f
。
エラー 3002
説明:複数の値を持つ SELECT リストには、名前空間以外の
*
を含めることはできません(つまり、SELECT a, *, b FROM myTable
はサポートされていません)。 非名前空間*
は単独で使用する必要があります。一般的な原因:このクエリに表示されているように、同じクエリで
SELECT *, a from foo
*
とその他を選択します。解決ステップ:
*
のみを選択するか(つまり、SELECT * FROM ...
)、複数の値を選択して、*
を含めないでください(つまりSELECT a, b FROM ...
)。
エラー 3004
説明:配列データソースには参照が含まれています。 配列データソースは定数である必要があります。
一般的な原因:このクエリが示すように、配列データソース内のフィールドにアクセスします:
SELECT * FROM [{'a': foo.a}] AS arr
。解決手順:配列データソースを変更して、定数のみを含めるようにします。 修正されたサンプルクエリ:
SELECT * FROM [{'a': 34}] AS arr
。
エラー 3005
説明: SELECT 個別の は許可されていません。
一般的な原因:
SELECT DISTINCT
クエリで使用されました。 たとえば、クエリSELECT DISTINCT * from foo
はこのエラーを発生させます。解決手順:クエリで
SELECT DISTINCT
を使用しないでください。
エラー 3006
説明:個別の UNION は許可されていません。 実行できるのは
UNION ALL
のみです(重複値は常に許可されている必要があります)。一般的な原因:
UNION
UNION ALL
ではなく を使用します。たとえば、クエリSELECT a FROM foo AS foo UNION SELECT b, c FROM bar AS bar
によってこのエラーが発生します。解決手順:和集合を実行する場合は、
UNION ALL
のみを使用します。 修正されたサンプルクエリ:SELECT a FROM foo AS foo UNION ALL SELECT b, c FROM bar AS bar
。
エラー 3007
説明: SELECT リストで参照されるデータソースが見つかりませんでした。
一般的な原因:
<field>
にサブフィールドがない場合にSELECT <field>.* FROM ...
のようなものを実行する。 たとえば、クエリSELECT a.* FROM foo
a
が であるクエリint
はこのエラーを発生させます。解決手順:存在しないフィールドにアクセスしようとするフィールドアクセスをすべて排除します。
エラー 3008
説明:どのデータソースにもフィールドが見つかりませんでした。
よくある原因:フィールドのスペルが間違っているか、存在しない、または検索しているコレクションが間違っている。 たとえば、
aa
がコレクションfoo
に存在しない場合、Select aa from foo
によってこのエラーが発生します。解決手順:フィールドのスペルが正しく表示され、正しいコレクション内にあることを確認します。 さらに、エラーメッセージは、書込み可能であった類似フィールドを提案します。
エラー 3009
説明:フィールドは複数のデータソースに存在し、あいまいです。
一般的な原因:コレクション(または他のデータソース)内の 2 つ以上のフィールドが同じ名前になります。 たとえば、
a
がfoo
のフィールドであると仮定すると、SELECT a FROM foo AS coll JOIN foo AS coll2
はこのエラーを発生させます。これは、コレクションcoll
とcoll2
の両方にフィールドa
があり、a
はあいまいな状態になるためです。解決手順:参照を修飾します(
field
ではなく<Collection>.<field>
)。 上記の例では、coll.a
またはcoll2.a
により、このエラーは修正されます。
エラー 3010
説明: * 引数は COUNT 集計関数でのみ有効です。
一般的な原因: COUNT は、
*
引数をサポートする唯一の集計操作です(つまりCOUNT(*)
。*
引数を他の操作、つまりSUM(*)
に渡すと、このエラーが発生します。 たとえば、クエリSELECT * FROM foo AS arr GROUP BY a AS a AGGREGATE SUM(*) AS gsum
は、解決手順:
*
はCOUNT
の引数としてのみ使用します。
エラー 3011
説明:集計関数がスカラー位置で使用されました。
一般的な原因:スカラー関数のみが使用できる集計関数を使用している たとえば、クエリ
SELECT VALUE {'suma': SUM(a)} FROM db.bar AS bar GROUP BY a AS a
では、SUM(a)
は集計関数であるためにこのエラーが発生します。解決手順:スカラー関数しかない場所では集計関数を削除します。
エラー 3012
説明:スカラー関数が集計位置で使用されました。
一般的な原因:集計関数のみが使用できるスカラー関数を使用している たとえば、クエリ
SELECT * FROM foo GROUP BY a AGGREGATE round(a) AS round
では、round
がスカラー関数であるため、このエラーが発生します。解決手順:集計関数しかない場所ではスカラー関数を削除します。
エラー 3013
説明:非集計式が GROUP BY 集計関数リストで見つかりました。
一般的な原因:集計が必要な場所で、集計またはスカラー関数以外のものを配置している。 (集計の代わりにスカラー関数を使用すると、別のエラーが発生します。エラー 3012)。 たとえば、クエリ
SELECT * FROM foo GROUP BY a AGGREGATE COUNT(*) + 7 AS whatever
では、集計だけでなく、集計に伴う追加操作があるためにこのエラーが発生します。解決ステップ:集計が許可されている場所でのみ集計を使用します。 修正されたサンプルクエリ:
SELECT * FROM foo GROUP BY a AGGREGATE COUNT(*) AS whatever
。
エラー 3014
説明:集計関数の引数は 1 つだけです。
一般的な原因:集計関数には複数の引数があります。 たとえば、クエリ
SELECT * FROM foo GROUP BY a AGGREGATE min(a,b) AS min
はmin
集計に 2 つの引数を提供するため、このエラーが発生します。解決手順:集計の引数が 1 つのみであることを確認してください。 追加の引数をすべて削除します。 修正されたサンプルクエリ:
SELECT * FROM foo GROUP BY a AGGREGATE min(b) AS min
。
エラー 3015
説明:スカラー関数は Distinguished をサポートしていません。
一般的な原因:スカラー関数で
DISTINCT
を使用している。 たとえば、クエリSELECT ROUND(DISTINCT a,2) FROM foo
はこのエラーを発生させます。解決手順:スカラー関数では
DISTINCT
を使用しないでください。DISTINCT
は集計関数でのみ使用してください。 修正されたサンプルクエリ:SELECT ROUND(a,2) FROM foo
。
エラー 3016
説明:派生データソースには重複するフィールドがあります。
一般的な原因:特定のサブクエリ内に同じ名前のフィールドを持つ複数のデータソースを含めると、このエラーが発生します。 たとえば、コレクション
bar
とコレクションfoo
に同じ名前のフィールドがあると仮定すると、クエリSELECT * FROM (SELECT * FROM foo AS foo, bar AS bar) AS derived
はこのエラーを発生させます。解決手順:一般的なフィールド名を、データソース全体で一意になるように更新します。 これを実現する簡単な方法は、同じ名前のフィールドに一意の名前をエイリアスすることです。 この手法を使用して修正されたクエリの例は次のとおりです:
SELECT * FROM (SELECT a, b, c, ..., z, FROM foo, a AS bar_a, b AS bar_b, c AS bar_c, ..., z AS bar_z FROM bar) AS derived
。
エラー 3019
説明: OUTR JOIN に JOIN 条件がありません。 OUTER JOIN では JOIN 条件を指定する必要があります。
一般的な原因: OUTER JOIN に JOIN 条件が欠落している。 たとえば、クエリ
SELECT * FROM foo AS foo LEFT OUTER JOIN bar
では、クエリに必要なON <condition>
部分が欠落しているため、このエラーが発生します。解決ステップ:結合条件を追加します(つまり
ON <condition>
)。 修正されたサンプルクエリ:SELECT * FROM foo AS foo LEFT OUTER JOIN bar ON a = a
。
エラー 3020
説明:フィールドが重複しているため、スキーマ環境を作成できませんでした。
一般的な原因:複数のコレクションが同じエイリアスを持つ。 たとえば、クエリ
SELECT * FROM foo AS alias, bar AS alias
はこのエラーを発生させます。解決手順:エイリアスがコレクションの一意であることを確認します。 修正されたサンプルクエリ:
SELECT * from foo as foo_alias, bar as bar_alias
。
エラー 3022
説明:スカラーサブクエリ式の度数は 1 である必要があります。
一般的な原因:スカラー サブクエリ式で複数のフィールド(または SQL 内の列)を選択した場合。 たとえば、クエリ
SELECT (SELECT * FROM foo LIMIT 1) FROM bar AS bar
では、サブクエリがSELECT *
を実行しているため、複数のフィールドが選択されているため、このエラーが発生します。解決手順:選択するフィールドのみを選択するようにサブクエリを変更します。 修正されたサンプルクエリ:
SELECT (SELECT a FROM foo LIMIT 1) FROM bar AS bar
エラー 3023
説明:ドキュメントに同じ名前の複数のフィールドがあります。
一般的な原因:コレクションから複数のフィールドを選択し、それらに次のクエリで表示されるように同じエイリアスを付与します:
SELECT a AS alias, b AS alias FROM foo
。解決手順:フィールドの重複するエイリアスを一意の名前に変更します。 修正されたサンプルクエリ:
SELECT a as a_alias, b as b_alias FROM foo
。
エラー 3024
説明:同じ FLATTEN オプションが複数回定義されています。
一般的な原因:次のクエリが示すように、同じオプションが複数回定義されています:
SELECT * FROM FLATTEN(foo WITH depth => 1, depth => 2)
。解決手順:重複するオプションをすべて削除して、各オプションが 1 回だけ使用されるようにします。 修正されたサンプルクエリ:
SELECT * FROM FLATTEN(foo WITH depth => 1)
。
エラー 3025
説明:データソースをフラット化するには、スキーマ情報が不十分です。
一般的な原因:十分なスキーマ情報を持たないコレクションをフラット化しようとしているとき たとえば、スキーマが定義されていない
noSchemaInfo
というコレクションがあるとします、クエリSELECT * FROM FLATTEN(noSchemaInfo)
はこのエラーを発生させます。 もう 1 つの一般的な原因は、additional_properties
がtrue
に設定されているスキーマまたはスキーマ内の一部のフィールドを使用して、コレクションをフラット化しようとすることです。解決手順:スキーマが十分に定義されていることを確認するために、スキーマ内のすべてのフィールドを定義します。 また、
additional_properties
をtrue
に設定しないようにしてください。 代わりに、スキーマを完全に定義します。
エラー 3026
説明:スキーマ内のフィールドは多形オブジェクトタイプ(つまり、
document
またはint
のいずれかになるフィールドを考慮してください)であるため、フラット化することはできません。null
とmissing
のオブジェクト多形データが許可されています。 フラット化はオブジェクト(別名ドキュメント)型でのみ機能するため、一部のフィールドがドキュメントではない可能性がある場合(他の可能性がnull
またはmissing
のみを除く)、フラット化することはできません。一般的な原因:多形オブジェクトタイプであるフィールドを含むスキーマを持つコレクションをフラット化しようとしている場合 たとえば、
coll
という名前のコレクションのフィールドが多形オブジェクトタイプであると仮定すると、クエリSELECT * FROM FLATTEN(coll)
はこのエラーを発生させます。解決手順:オブジェクトタイプのみをフラット化できます。 フィールドをフラット化できるようにする場合は、そのフィールドのスキーマは オブジェクトタイプである必要があります。 このルールの唯一の例外は、null または欠落している可能性があるオブジェクトです。多形であるにもかかわらず、これらのオブジェクトをフラット化できます。 このエラーを修正するには、多形オブジェクトタイプを持つフィールドを持つコレクションのフラット化の試行を停止するか、それらのフィールドのスキーマを変更してオブジェクトタイプのみになるようにする必要があります。
エラー 3027
説明:同じ UNIX オプションが複数回定義されています。
一般的な原因:次のクエリに示されているように、同じオプションが複数回使用されています:
SELECT * FROM UNWIND(foo WITH PATH => a, PATH => b)
。解決手順:重複するオプションをすべて削除して、各オプションが 1 回だけ使用されるようにします。 修正されたサンプルクエリ:
SELECT * FROM UNWIND(foo WITH PATH => a)
。
エラー 3028
説明: UNIX に PATH オプションがありません。 UNIX では PATH オプションを指定する必要があります。
一般的な原因:次のクエリ
SELECT * FROM UNWIND(foo)
に示されているように、UNIX には PATH オプションがありません。解決手順: UNIX に PATH オプションを追加します。 修正されたサンプルクエリ:
SELECT * FROM UNWIND(foo WITH PATH => a)
。
エラー 3029
説明: UNIX PATH オプションは識別子ではありません。ただし、1 である必要があります。
一般的な原因:次のクエリに示されているように、UNWind PATH オプションは識別子ではありません:
SELECT * FROM UNWIND(foo WITH PATH => {'a': []}.a)
。解決手順: UNIX PATH オプションを識別子に変更します。 修正されたサンプルクエリ:
SELECT * FROM UNWIND(foo WITH PATH => a)
。
エラー 3030
説明: CAST のターゲット タイプは無効なタイプ(つまり、不明なタイプまたは MongoDB がキャストをサポートしていないタイプ)です。
- 一般的な原因: MongoDB がキャストをサポートしていない型へのキャスト。 たとえば、クエリ
SELECT CAST(a AS DATE) FROM foo
- は、
DATE
がサポートされているターゲットタイプではないため、このエラーを発生させます。
- 一般的な原因: MongoDB がキャストをサポートしていない型へのキャスト。 たとえば、クエリ
解決手順:サポートされているターゲット タイプにのみキャストします。 有効なターゲット タイプは、AR配列、DOCUMENT、 double 、 string 、 ObjectId 、bool、BSON_DATE、INT値、LONG、DEC内の 1 つ、またはそれに対応する SQL-92 の型エイリアスのいずれかです。REAL、FLOAT、VARCHAR、CHAR、CHARV設定、文字列Varying、DEC、数値、BIT、ブール値、タイムスタンプ、整数、 SMalint 修正されたサンプルクエリ:
SELECT CAST(a AS BSON_DATE) FROM foo
。
エラー 3034
説明:ソートキーは複雑式を使用しているため無効です(つまり、
ORDER BY {'a': b}.a
は無効です)。- 一般的な原因:複雑な式やフィールドパスを「不正確」に構築しようとする たとえば、クエリ
SELECT * FROM foo ORDER BY CAST(d AS DOCUMENT).a
- は、
CAST(d AS DOCUMENT)
が複雑な式であるため、このエラーを発生させます。
- 一般的な原因:複雑な式やフィールドパスを「不正確」に構築しようとする たとえば、クエリ
- 解決手順: "pure" フィールドパスのみでソートすることを確認してください。 「消去されていない」フィールドパスは、次の要素のみで構成されています:
- 識別子(
foo.d.a
やa
など)。
エラー 4000
説明:フィールド名が競合するため、名前空間以外の結果セットは返されません。
一般的な原因:
$sql
集計excludeNamespaces
フィールドをtrue
に設定し、同じフィールド名を持つ複数のコレクションをクエリすると、このエラーが発生します。 このオプションはコレクション名前空間を削除するため、異なるコレクションに属する同じ名前のフィールドは一意ではなくなります。 たとえば、コレクションfoo
とbar
がそれぞれフィールドa
と、SELECT foo.*, bar.a FROM foo, bar
などのクエリを含むコレクションを考えてみましょう。 結果セット内のコレクション名前空間では、2 つのa
フィールドはfoo
とbar
に区別できます。ただし、コレクションの名前空間がないと、それらは相互に区別できません。解決手順:このエラーを修正する最良の方法は、 エイリアス を使用して競合するフィールドを一意にすることです。 修正されたサンプルクエリ:
SELECT foo.*, bar.a AS a_unique_alias from foo, bar
。