Dela via


Använda MongoDB-tilläggskommandon för att hantera data som lagras i Azure Cosmos DB för MongoDB

GÄLLER FÖR: MongoDB

Följande dokument innehåller de anpassade åtgärdskommandon som är specifika för Azure Cosmos DB för MongoDB. Dessa kommandon kan användas för att skapa och hämta databasresurser som är specifika för Azure Cosmos DB-kapacitetsmodellen.

Genom att använda Azure Cosmos DB för MongoDB kan du dra nytta av de delade fördelarna med Azure Cosmos DB. Dessa fördelar omfattar, men är inte begränsade till:

  • Global distribution
  • Automatisk horisontell partitionering
  • Hög tillgänglighet
  • Svarstidsgarantier
  • Kryptering i vila
  • Säkerhetskopior

Du kan dra nytta av dessa fördelar samtidigt som du bevarar dina investeringar i ditt befintliga MongoDB-program. Du kan kommunicera med Azure Cosmos DB för MongoDB med någon av MongoDB-klientdrivrutinerna med öppen källkod. Med Azure Cosmos DB for MongoDB kan du använda befintliga klientdrivrutiner genom att följa MongoDB-trådprotokollet.

Stöd för MongoDB-protokoll

Azure Cosmos DB for MongoDB är kompatibelt med MongoDB-serverversion 4.0, 3.6 och 3.2. Mer information finns i funktioner och syntax som stöds i versionerna 4.0, 3.6 och 3.2.

Följande tilläggskommandon skapar och ändrar Azure Cosmos DB-specifika resurser via databasbegäranden:

Skapa databas

Kommandot create database extension skapar en ny MongoDB-databas. Databasnamnet kan användas från databaskontexten use database som anges av kommandot. I följande tabell beskrivs parametrarna i kommandot:

Fält Type Beskrivning
customAction string Namnet på det anpassade kommandot. Värdet måste vara CreateDatabase.
offerThroughput int Etablerat dataflöde som du har angett i databasen. Den här parametern är valfri.
autoScaleSettings Object Krävs för autoskalningsläge. Det här objektet innehåller de inställningar som är associerade med kapacitetsläget Autoskalning. Du kan konfigurera värdet maxThroughput , som beskriver det högsta antalet enheter för begäranden som samlingen kan öka till dynamiskt.

Output

Om kommandot lyckas returneras följande svar:

{ "ok" : 1 }

Se standardutdata för anpassat kommando för parametrarna i utdata.

Exempel: Skapa en databas

Om du vill skapa en databas med namnet "test" som använder alla standardvärden använder du följande kommando:

use test
db.runCommand({customAction: "CreateDatabase"});

Det här kommandot skapar en databas utan dataflöde på databasnivå. Den här åtgärden innebär att samlingarna i den här databasen måste ange hur mycket dataflöde du behöver använda.

Exempel: Skapa en databas med dataflöde

Om du vill skapa en databas med namnet "test" och ange ett etablerat dataflöde på databasnivå på 1 000 RU:er använder du följande kommando:

use test
db.runCommand({customAction: "CreateDatabase", offerThroughput: 1000 });

Det här kommandot skapar en databas och anger ett dataflöde till den. Alla samlingar i den här databasen delar det angivna dataflödet, såvida inte samlingarna skapas med en specifik dataflödesnivå.

Exempel: Skapa en databas med autoskalningsdataflöde

Om du vill skapa en databas med namnet "test" och ange ett maximalt dataflöde för autoskalning på 20 000 RU/s på databasnivå använder du följande kommando:

use test
db.runCommand({customAction: "CreateDatabase", autoScaleSettings: { maxThroughput: 20000 } });

Uppdatera databas

Kommandot uppdatera databastillägget uppdaterar de egenskaper som är associerade med den angivna databasen. Det går bara att ändra databasen från etablerat dataflöde till autoskalning och vice versa i Azure-portalen. I följande tabell beskrivs parametrarna i kommandot:

Fält Type Beskrivning
customAction string Namnet på det anpassade kommandot. Värdet måste vara UpdateDatabase.
offerThroughput int Nytt etablerat dataflöde som du vill ange i databasen om databasen använder dataflöde på databasnivå
autoScaleSettings Object Krävs för autoskalningsläge. Det här objektet innehåller de inställningar som är associerade med kapacitetsläget Autoskalning. Du kan konfigurera värdet maxThroughput , som beskriver det högsta antalet enheter för begäranden som databasen kan ökas till dynamiskt.

Det här kommandot använder databasen som anges i kontexten för sessionen. Den här databasen är samma som du använde i use <database> kommandot . För närvarande går det inte att ändra databasnamnet med det här kommandot.

Output

Om kommandot lyckas returneras följande svar:

{ "ok" : 1 }

Se standardutdata för anpassat kommando för parametrarna i utdata.

Exempel: Uppdatera det etablerade dataflödet som är associerat med en databas

Om du vill uppdatera det etablerade dataflödet för en databas med namnet "test" till 1 200 RU:er använder du följande kommando:

use test
db.runCommand({customAction: "UpdateDatabase", offerThroughput: 1200 });

Exempel: Uppdatera autoskalningsdataflödet som är associerat med en databas

Om du vill uppdatera det etablerade dataflödet för en databas med namnet "test" till 20 000 RU:er eller för att omvandla den till en dataflödesnivå för autoskalning använder du följande kommando:

use test
db.runCommand({customAction: "UpdateDatabase", autoScaleSettings: { maxThroughput: 20000 } });

Hämta databas

Kommandot hämta databastillägg returnerar databasobjektet. Databasnamnet används från databaskontexten som kommandot körs mot.

{
  customAction: "GetDatabase"
}

I följande tabell beskrivs parametrarna i kommandot:

Fält Type Beskrivning
customAction string Namnet på det anpassade kommandot. Värdet måste vara GetDatabase.

Output

Om kommandot lyckas innehåller svaret ett dokument med följande fält:

Fält Type Beskrivning
ok int Status för svar. 1 == lyckades. 0 == fel.
database string Namnet på databasen.
provisionedThroughput int Etablerat dataflöde som anges i databasen om databasen använder manuellt dataflöde på databasnivå
autoScaleSettings Object Det här objektet innehåller de kapacitetsparametrar som är associerade med databasen om det använder autoskalningsläget. Värdet maxThroughput beskriver det högsta antalet enheter för begäranden som databasen kan ökas till dynamiskt.

Om kommandot misslyckas returneras ett standardsvar för anpassade kommandon. Se standardutdata för anpassat kommando för parametrarna i utdata.

Exempel: Hämta databasen

Om du vill hämta databasobjektet för en databas med namnet "test"använder du följande kommando:

use test
db.runCommand({customAction: "GetDatabase"});

Om databasen inte har något associerat dataflöde skulle utdata vara:

{ "database" : "test", "ok" : 1 }

Om databasen har ett manuellt dataflöde på databasnivå associerat med den, visar provisionedThroughput utdata värdena:

{ "database" : "test", "provisionedThroughput" : 20000, "ok" : 1 }

Om databasen har ett autoskalningsdataflöde på databasnivå associerat med den, visar provisionedThroughpututdata , som beskriver den minsta RU/s för databasen och autoScaleSettings objektet inklusive maxThroughput, som beskriver det maximala ANTALET RU/s för databasen.

{
        "database" : "test",
        "provisionedThroughput" : 2000,
        "autoScaleSettings" : {
                "maxThroughput" : 20000
        },
        "ok" : 1
}

Skapa samling

Kommandot skapa samlingstillägg skapar en ny MongoDB-samling. Databasnamnet används från databaskontexten use database som anges av kommandot . Formatet för kommandot CreateCollection är följande:

{
  customAction: "CreateCollection",
  collection: "<Collection Name>",
  shardKey: "<Shard key path>",
  // Replace the line below with "autoScaleSettings: { maxThroughput: (int) }" to use Autoscale instead of Provisioned Throughput. Fill the required Autoscale max throughput setting.
  offerThroughput: (int) // Provisioned Throughput enabled with required throughput amount set.
  indexes: [{key: {_id: 1}, name: "_id_1"}, ... ] // Optional indexes (3.6+ accounts only).
}

I följande tabell beskrivs parametrarna i kommandot:

Fält Typ Obligatoriskt Beskrivning
customAction string Obligatoriskt Namnet på det anpassade kommandot. Värdet måste vara CreateCollection.
collection string Obligatoriskt Namnet på samlingen. Inga specialtecken eller blanksteg tillåts.
offerThroughput int Valfritt Etablerat dataflöde som ska anges i databasen. Om den här parametern inte anges är den som standard minst 400 RU/s. * Om du vill ange dataflöde över 10 000 RU/s krävs parametern shardKey .
shardKey string Krävs för samlingar med stort dataflöde Sökvägen till Shard-nyckeln för den fragmenterade samlingen. Den här parametern krävs om du anger fler än 10 000 RU/s i offerThroughput. Om den har angetts kräver alla dokument som infogas den här nyckeln och värdet.
autoScaleSettings Object Krävs för autoskalningsläge Det här objektet innehåller de inställningar som är associerade med kapacitetsläget Autoskalning. Du kan konfigurera värdet maxThroughput , som beskriver det högsta antalet enheter för begäranden som samlingen kan ökas till dynamiskt.
indexes Array Du kan också konfigurera index. Den här parametern stöds endast för 3,6+-konton. I nuläget krävs ett index på _id. Varje post i matrisen måste innehålla en nyckel för ett eller flera fält, ett namn och kan innehålla indexalternativ. Om du till exempel vill skapa ett sammansatt unikt index för fälten a och b använda den här posten: {key: {a: 1, b: 1}, name:"a_1_b_1", unique: true}.

Output

Returnerar ett standardsvar för anpassade kommandon. Se standardutdata för anpassat kommando för parametrarna i utdata.

Exempel: Skapa en samling med minsta möjliga konfiguration

Om du vill skapa en ny samling med namn "testCollection" och standardvärden använder du följande kommando:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection"});

Den här åtgärden resulterar i en ny fast, ohardad samling med 400RU/s och ett index i fältet _id som skapas automatiskt. Den här typen av konfiguration gäller även när du skapar nya samlingar via insert() funktionen. Till exempel:

use test
db.newCollection.insert({});

Exempel: Skapa en ohardad samling

Om du vill skapa en ohardad samling med namn "testCollection" och etablerat dataflöde på 1 000 RU:er använder du följande kommando:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", offerThroughput: 1000});

Du kan skapa en samling med upp till 10 000 RU/s som offerThroughput utan att behöva ange en shardnyckel. För samlingar med större dataflöde kan du titta i nästa avsnitt.

Exempel: Skapa en fragmenterad samling

Om du vill skapa en fragmenterad samling med namn "testCollection" och etablerat dataflöde på 11 000 RU:er och en shardkey egenskap "a.b" använder du följande kommando:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", offerThroughput: 11000, shardKey: "a.b" });

Det här kommandot kräver nu parametern shardKey eftersom mer än 10 000 RU/s anges i offerThroughput.

Exempel: Skapa en ohardad autoskalningssamling

Om du vill skapa en ohardad samling med namnet 'testCollection' som använder kapacitet för autoskalningsdataflöde inställt på 4 000 RU/s använder du följande kommando:

use test
db.runCommand({ 
    customAction: "CreateCollection", collection: "testCollection", 
    autoScaleSettings:{
      maxThroughput: 4000
    } 
});

För värdet autoScaleSettings.maxThroughput kan du ange ett intervall från 4 000 RU/s till 10 000 RU/s utan en shardnyckel. För högre dataflöde för autoskalning måste du ange parametern shardKey .

Exempel: Skapa en fragmenterad autoskalningssamling

Om du vill skapa en fragmenterad samling med namnet 'testCollection' med en shardnyckel med namnet 'a.b', och som använder kapacitet för autoskalning av dataflöde inställt på 20 000 RU/s, använder du följande kommando:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", shardKey: "a.b", autoScaleSettings: { maxThroughput: 20000 }});

Uppdatera samling

Kommandot för uppdateringssamlingstillägget uppdaterar egenskaperna som är associerade med den angivna samlingen. Det går bara att ändra samlingen från etablerat dataflöde till autoskalning och vice versa i Azure-portalen.

{
  customAction: "UpdateCollection",
  collection: "<Name of the collection that you want to update>",
  // Replace the line below with "autoScaleSettings: { maxThroughput: (int) }" if using Autoscale instead of Provisioned Throughput. Fill the required Autoscale max throughput setting. Changing between Autoscale and Provisioned throughput is only supported in the Azure Portal.
  offerThroughput: (int) // Provisioned Throughput enabled with required throughput amount set.
  indexes: [{key: {_id: 1}, name: "_id_1"}, ... ] // Optional indexes (3.6+ accounts only).
}

I följande tabell beskrivs parametrarna i kommandot:

Fält Type Beskrivning
customAction string Namnet på det anpassade kommandot. Värdet måste vara UpdateCollection.
collection string Namnet på samlingen.
offerThroughput int Etablerat dataflöde som ska anges för samlingen.
autoScaleSettings Object Krävs för autoskalningsläge. Det här objektet innehåller de inställningar som är associerade med kapacitetsläget Autoskalning. Värdet maxThroughput beskriver det högsta antalet enheter för begäranden som samlingen kan ökas till dynamiskt.
indexes Array Du kan också konfigurera index. Den här parametern stöds endast för 3,6+-konton. I nuläget ersätter den angivna uppsättningen index (inklusive avsläppningsindex) de befintliga indexen i samlingen. Ett index på _id krävs. Varje post i matrisen måste innehålla en nyckel för ett eller flera fält, ett namn och kan innehålla indexalternativ. Om du till exempel vill skapa ett sammansatt unikt index för fälten a och b använder du den här posten: {key: {a: 1, b: 1}, name: "a_1_b_1", unique: true}.

Output

Returnerar ett standardsvar för anpassade kommandon. Se standardutdata för anpassat kommando för parametrarna i utdata.

Exempel: Uppdatera det etablerade dataflödet som är associerat med en samling

Om du vill uppdatera det etablerade dataflödet för en samling med namnet "testCollection" till 1 200 RU:er använder du följande kommando:

use test
db.runCommand({customAction: "UpdateCollection", collection: "testCollection", offerThroughput: 1200 });

Hämta samling

Det anpassade kommandot hämta samling returnerar samlingsobjektet.

{
  customAction: "GetCollection",
  collection: "<Name of the collection>"
}

I följande tabell beskrivs parametrarna i kommandot:

Fält Type Beskrivning
customAction string Namnet på det anpassade kommandot. Värdet måste vara GetCollection.
collection string Namnet på samlingen.

Output

Om kommandot lyckas innehåller svaret ett dokument med följande fält

Fält Type Beskrivning
ok int Status för svar. 1 == lyckades. 0 == fel.
database string Namnet på databasen.
collection string Namnet på samlingen.
shardKeyDefinition document Indexspecifikationsdokument som används som en shardnyckel. Det här fältet är en valfri svarsparameter.
provisionedThroughput int Etablerat dataflöde som ska anges för samlingen. Det här fältet är en valfri svarsparameter.
autoScaleSettings Object Det här objektet innehåller de kapacitetsparametrar som är associerade med databasen om det använder autoskalningsläget. Värdet maxThroughput beskriver det högsta antalet enheter för begäranden som samlingen kan ökas till dynamiskt.

Om kommandot misslyckas returneras ett standardsvar för anpassade kommandon. Se standardutdata för anpassat kommando för parametrarna i utdata.

Exempel: Hämta samlingen

Om du vill hämta samlingsobjektet för en samling med namnet "testCollection"använder du följande kommando:

use test
db.runCommand({customAction: "GetCollection", collection: "testCollection"});

Om samlingen har en associerad dataflödeskapacitet innehåller den provisionedThroughput värdet och utdata blir:

{
        "database" : "test",
        "collection" : "testCollection",
        "provisionedThroughput" : 400,
        "ok" : 1
}

Om samlingen har ett associerat autoskalningsdataflöde innehåller den autoScaleSettings objektet med parametern maxThroughput , som definierar det maximala dataflöde som samlingen ökar till dynamiskt. Dessutom innehåller provisionedThroughput det även värdet, som definierar det minsta dataflöde som den här samlingen minskar till om det inte finns några begäranden i samlingen:

{
        "database" : "test",
        "collection" : "testCollection",
        "provisionedThroughput" : 1000,
        "autoScaleSettings" : {
            "maxThroughput" : 10000
        },
        "ok" : 1
}

Om samlingen delar dataflöde på databasnivå, antingen i autoskalningsläge eller manuellt, skulle utdata vara:

{ "database" : "test", "collection" : "testCollection", "ok" : 1 }
{
        "database" : "test",
        "provisionedThroughput" : 2000,
        "autoScaleSettings" : {
            "maxThroughput" : 20000
        },
        "ok" : 1
}

Parallellisera ändringsströmmar

När du använder ändringsströmmar i stor skala är det bäst att fördela belastningen jämnt. Följande kommando returnerar en eller flera återställningstoken för ändringsström – var och en motsvarar data från en enda fysisk shard/partition (flera logiska shards/partitioner kan finnas på en fysisk partition). Varje återställningstoken gör att watch() endast returnerar data från den fysiska fragmentet/partitionen.

Använd db.collection.watch() på varje meritförteckningstoken (en tråd per token) för att skala ändringsströmmar effektivt.

{
        customAction: "GetChangeStreamTokens", 
        collection: "<Name of the collection>", 
        startAtOperationTime: "<BSON Timestamp>" // Optional. Defaults to the time the command is run.
} 

Exempel: Hämta strömtoken

Kör det anpassade kommandot för att hämta en meritförteckningstoken för varje fysisk shard/partition.

use test
db.runCommand({customAction: "GetChangeStreamTokens", collection: "<Name of the collection>"})

Kör en watch()-tråd/process för varje återställningstoken som returneras från det anpassade kommandot GetChangeStreamTokens. Här är ett exempel på en tråd.

db.test_coll.watch([{ $match: { "operationType": { $in: ["insert", "update", "replace"] } } }, { $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1 } }], 
{fullDocument: "updateLookup", 
resumeAfter: { "_data" : BinData(0,"eyJWIjoyLCJSaWQiOiJQeFVhQUxuMFNLRT0iLCJDb250aW51YXRpb24iOlt7IkZlZWRSYW5nZSI6eyJ0eXBlIjoiRWZmZWN0aXZlIFBhcnRpdGlvbiBLZXkgUmFuZ2UiLCJ2YWx1ZSI6eyJtaW4iOiIiLCJtYXgiOiJGRiJ9fSwiU3RhdGUiOnsidHlwZSI6ImNvbnRpbndkFLbiIsInZhbHVlIjoiXCIxODQ0XCIifX1dfQ=="), "_kind" : NumberInt(1)}})

Dokumentet (värdet) i fältet resumeAfter representerar återställningstoken. Kommandot watch() returnerar en förbannelse för alla dokument som har infogats, uppdaterats eller ersatts från den fysiska partitionen sedan det anpassade kommandot GetChangeStreamTokens kördes. Ett exempel på de data som returneras ingår här.

{
  "_id": {
    "_data": BinData(0,
    "eyJWIjoyLCJSaWQiOiJQeFVhQUxuMFNLRT0iLCJDfdsfdsfdsft7IkZlZWRSYW5nZSI6eyJ0eXBlIjoiRWZmZWN0aXZlIFBhcnRpdGlvbiBLZXkgUmFuZ2UiLCJ2YWx1ZSI6eyJtaW4iOiIiLCJtYXgiOiJGRiJ9fSwiU3RhdGUiOnsidHlwZSI6ImNvbnRpbnVhdGlvbiIsInZhbHVlIjoiXCIxOTgwXCIifX1dfQ=="),
    "_kind": 1
  },
  "fullDocument": {
    "_id": ObjectId("60da41ec9d1065b9f3b238fc"),
    "name": John,
    "age": 6
  },
  "ns": {
    "db": "test-db",
    "coll": "test_coll"
  },
  "documentKey": {
    "_id": ObjectId("60da41ec9d1065b9f3b238fc")
  }
}

Varje dokument som returneras innehåller en meritförteckningstoken (de är likadana för varje sida). Denna meritförteckningstoken ska lagras och återanvändas om tråden/processen dör. Den här meritförteckningstoken tar vid där du slutade och tar endast emot data från den fysiska partitionen.

Standardutdata för ett anpassat kommando

Om inget anges innehåller ett anpassat svar ett dokument med följande fält:

Fält Type Beskrivning
ok int Status för svar. 1 == lyckades. 0 == fel.
code int Returnerades endast när kommandot misslyckades (d.v.s. ok == 0). Innehåller MongoDB-felkoden. Det här fältet är en valfri svarsparameter.
errMsg string Returnerades endast när kommandot misslyckades (d.v.s. ok == 0). Innehåller ett användarvänligt felmeddelande. Det här fältet är en valfri svarsparameter.

Till exempel:

{ "ok" : 1 }

Nästa steg

Härnäst kan du gå vidare med att lära dig följande Azure Cosmos DB-begrepp: