web-dev-qa-db-ja.com

COSMOS DBデータベースを消去する方法またはAzure Portalを使用してすべてのアイテムを削除する方法

https://portal.azure.com であれば、Azure Cosmos DBアカウントを開く(1) - >データエクスプローラ(2) - >ユーザーをクリック(3) - >新しいSQLクエリをクリックします。

Azure screenshot 1

Azureはテキストボックスを開き、クエリを入力します。

Azure screenshot 2

COSMOS DBは代わりにDELETEを使用できないことを確認しました。 https://stackoverflow.com/a/48339202/1198404 次のようなことをするべきです。

SELECT * FROM c DELETE c
SELECT * FROM c DELETE *
 _

しかし私の試みのどれでもうまくいった。

7
chelder

削除を完全に実行するには、削除ストアドプロシージャを追加できます。

function bulkDeleteSproc(query) {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var response = getContext().getResponse();
var responseBody = {
    deleted: 0,
    continuation: true       
};
query='SELECT * FROM root r';

// Validate input.
if (!query) throw new Error("The query is undefined or null.");

tryQueryAndDelete();


function tryQueryAndDelete(continuation) {

    var requestOptions = {continuation: continuation};
    console.log(requestOptions);
    var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, retrievedDocs, responseOptions) {
        if (err) throw err;

        if (retrievedDocs.length > 0) {
            // Begin deleting documents as soon as documents are returned form the query results.
            // tryDelete() resumes querying after deleting; no need to page through continuation tokens.
            //  - this is to prioritize writes over reads given timeout constraints.
            tryDelete(retrievedDocs);
        } else if (responseOptions.continuation) {
            // Else if the query came back empty, but with a continuation token; repeat the query w/ the token.
            tryQueryAndDelete(responseOptions.continuation);
        } else {
            // Else if there are no more documents and no continuation token - we are finished deleting documents.
            responseBody.continuation = false;
            response.setBody(responseBody);
        }
    });

    // If we hit execution bounds - return continuation: true.
    if (!isAccepted) {
        console.log("tryquerydelete not accepted");
        response.setBody(responseBody);
    }
}

// Recursively deletes documents passed in as an array argument.
// Attempts to query for more on empty array.
function tryDelete(documents) {
    if (documents.length > 0) {
        // Delete the first document in the array.
        var isAccepted = collection.deleteDocument(documents[0]._self, {}, function (err, responseOptions) {
            if (err) throw err;

            responseBody.deleted++;
           console.log("hi");
            documents.shift();

            // Delete the next document in the array.
            tryDelete(documents);
            console.log(isAccepted);
        });

        // If we hit execution bounds - return continuation: true.
        if (!isAccepted) {
            console.log("trydelete not accepted");
            response.setBody(responseBody);
        }
    } else {
        // If the document array is empty, query for more documents.
        tryQueryAndDelete();
    }
}
 _

}

0
ArunkumaarCN

Portalからではなく、 BulkexeCutor でのみバルク削除しかできません。ポータルから一度に1つの項目を削除できます。

私は環境設定を異なる方法で処理します。私はあなたが各環境に別々のリソースグループを作成するか、少なくとも製造のために別のコレクションを作成します。リソースグループソリューションに関しては、コストダウンするために、使用していないときにテスト環境を引き下げるだけです。

0
dama