web-dev-qa-db-ja.com

Query Explorerを使用して、条件に基づいてCosmosDBからドキュメントを削除します

すべてのドキュメントを削除するクエリまたはその他の簡単な方法は何ですかコレクション内のwhere条件に一致しますか?
DELETE * FROM c WHERE c.DocumentType = 'EULA'しかし、どうやら、それは動作しません。

注:このためのC#実装は探していません。

11
JerryGoyal

DELETE * FROM c WHERE c.DocumentType = 'EULA'のようなものが欲しいのですが、どうやら機能しません。

この方法でドキュメントを削除することはサポートされていません。最初にSELECTクエリを使用してドキュメントを選択し、次にそれらを個別に削除する必要があります。必要に応じて、ストアドプロシージャでフェッチおよび削除のコードを記述してから、そのストアドプロシージャを実行できます。

12
Gaurav Mantri

これは少し古いですが、同じ要件があり、@ Gaurav Mantriが書いたことの具体的な例を見つけました。

ストアドプロシージャスクリプトは次のとおりです。

https://social.msdn.Microsoft.com/Forums/Azure/en-US/ec9aa862-0516-47af-badd-dad8a4789dd8/delete-multiple-docdb-documents-within-the-Azure-portal? forum = AzureDocumentDB

Azureポータルに移動し、上からスクリプトを取得して、削除する必要があるデータベース->コレクションに新しいストアドプロシージャを作成します。

次に、ストアドプロシージャペインの一番下のスクリプトテキスト領域の下に、パラメータを入力する場所があります。私の場合、すべてを削除したいので、次を使用しました:

SELECT c._self FROM c

私はあなたのものになると思います:

SELECT c._self FROM c WHERE c.DocumentType = 'EULA'

次に、「保存して実行」をクリックします。 Viola、一部のドキュメントが削除されます。 Azure Portalで動作するようになった後、Azure DocumentDB Studioを切り替えて、何が起きているかをよりよく把握しました。つまり一度に18を削除するように調整されていることがわかりました(結果で返されました)。何らかの理由で、Azureポータルでこれを見ることができませんでした。

とにかく、実行ごとに一定量の削除に制限されていても、非常に便利です。 spの実行も抑制されるため、キーボードをマッシュすることはできません。管理可能な数のドキュメントを削除しない限り、コレクションを削除して再作成するだけだと思います(500未満と考えます)。

上記リンクのスクリプトを共有してくれたMimi Gentz @Microsoftに小道具。

HTH

11
Ben E G

すべてのドキュメントをリストし、すべてのドキュメントを削除するスクリプトを作成しましたが、選択したドキュメントも削除するように変更できます。

var docdb = require("documentdb");
var async = require("async");

var config = {
  Host: "https://xxxx.documents.Azure.com:443/",
  auth: {
    masterKey: "xxxx"
  }
};

var client = new docdb.DocumentClient(config.Host, config.auth);

var messagesLink = docdb.UriFactory.createDocumentCollectionUri("xxxx", "xxxx");

var listAll = function(callback) {
  var spec = {
    query: "SELECT * FROM c",
    parameters: []
  };

  client.queryDocuments(messagesLink, spec).toArray((err, results) => {
    callback(err, results);
  });
};

var deleteAll = function() {
  listAll((err, results) => {
    if (err) {
      console.log(err);
    } else {
      async.forEach(results, (message, next) => {
        client.deleteDocument(message._self, err => {
          if (err) {
            console.log(err);
            next(err);
          } else {
            next();
          }
        });
      });
    }
  });
};

var task = process.argv[2];
switch (task) {
  case "listAll":
    listAll((err, results) => {
      if (err) {
        console.error(err);
      } else {
        console.log(results);
      }
    });
    break;
  case "deleteAll":
    deleteAll();
    break;

  default:
    console.log("Commands:");
    console.log("listAll deleteAll");
    break;
}
3
user1172274