18

MongoDBのドキュメントによると、サーバー側の保存された関数を使用することはお勧めしません。この警告の背後にある理由は何ですか?

4

1 に答える 1

21

グーグルの検索結果があなたにそれをする方法をあなたに言う人々だけで満たされているにもかかわらず、私はリストを数回述べたと確信しています:

  • ですeval
  • eval簡単に注入できる自然な能力があり、SQLと同等の非PDOのようなものです。フルスケールのエスケープライブラリを構築しないと、混乱してしまいます。これらの関数を使用することで、MongoDBのより安全な母国語を、古いSQLと同じくらい安全でないものに効果的に置き換えることができます。
  • グローバルロックを取得し、書き込みロックを取得でき、特定の場合に解放される他の操作とは異なり、操作が完全に完了するまで解放されません。
  • evalプライマリでのみ機能し、レプリカセットの他のメンバーでは機能しません
  • それは基本的に、データベースと管理コマンドの任意の部分に触れる完全な機能を備えたMongoDBに付属するバンドルされたV8 / spidermonkey envoで1トンのJSを実行しており、チェックされていませんが、安全に聞こえますか?
  • これはMongoDBでも「MongoDBsSQL」でもありません。MongoDBsC++コード自体ではなく、組み込みのJS環境内で実行されます(集約フレームワークとは異なります)。
  • 前のポイントのため、他の多くのオプションと比較して非常に遅いので、これは$where使用法にも当てはまります。

これで、この面で始めるのに十分なはずです。

于 2013-03-27T13:40:16.810 に答える