{ "orgId" : 2 }
は使用しないでください 更新ドキュメントで。
コードからこの行を削除すると、正常に機能するはずです。
u.append("orgId", orgId);
エラーをトリガーした理由は、ドキュメントの更新を指定する方法が2つあり、両方のクロスブレッドを作成したためです。オプションは次のとおりです。
- 更新用の完全なドキュメントを提供します。このモデルの場合、既存のドキュメントは提供されたドキュメントによって上書きされます。
- 更新演算子を使用して、コレクション内の既存のドキュメントを変更します。
2番目のバージョンを使用する場合、更新ドキュメントのすべての「トップレベルキー」は$
で始まります。 。最初のオプションを使用する場合、最上位のキーはいずれも$
で始まりません。 。コードは最初のフィールドを調べ、それが置換ドキュメントであると考え、ドキュメントのキーが$
で始まることができないため、ドキュメントの残りの部分が有効であることを検証しようとしたときに失敗しました (更新ドキュメントやクエリドキュメントと混同しないでください)。
編集:
アップサートの場合(たとえば、ドキュメントがまだ存在せず、更新にフラグを立ててアップサートを許可する場合)、クエリの完全一致演算子を使用してドキュメントをシードします。上記の例では、{ "orgId" : 2 }
のシードドキュメントを取得します。 。その後、サーバーは更新演算子を適用し、結果を保存します。