MongoDB-extensieopdrachten gebruiken om gegevens te beheren die zijn opgeslagen in Azure Cosmos DB API voor MongoDB

VAN TOEPASSING OP: Azure Cosmos DB-API voor MongoDB

Het volgende document bevat de aangepaste actieopdrachten die specifiek zijn voor Azure Cosmos DB API voor MongoDB. Deze opdrachten kunnen worden gebruikt voor het maken en verkrijgen van databaseresources die specifiek zijn Azure Cosmos DB het capaciteitsmodel.

Met behulp van de API van de Azure Cosmos DB voor MongoDB kunt u profiteren van de voordelen van Cosmos DB zoals wereldwijde distributie, automatische sharding, hoge beschikbaarheid, latentiegaranties, automatische versleuteling in rust, back-ups en nog veel meer, terwijl uw investeringen in uw MongoDB-app behouden blijven. U kunt communiceren met de API Azure Cosmos DB mongoDB van de klant met behulp van een van de open-source MongoDB-clientst stuurprogramma's. De AZURE COSMOS DB api voor MongoDB maakt het gebruik van bestaande clientst stuurprogramma's mogelijk door zich te houden aan het MongoDB-wireprotocol.

MongoDB-protocolondersteuning

Azure Cosmos DB API voor MongoDB is compatibel met MongoDB-serverversie 4.0, 3.6 en 3.2. Zie de ondersteunde functies en syntaxis in de artikelen 4.0, 3.6en 3.2 voor meer informatie.

De volgende extensieopdrachten bieden de mogelijkheid om specifieke Azure Cosmos DB te maken en te wijzigen via databaseaanvragen:

Database maken

Met de opdracht database-extensie maken maakt u een nieuwe MongoDB-database. De databasenaam kan worden gebruikt vanuit de databasecontext die is ingesteld door de use database opdracht . In de volgende tabel worden de parameters in de opdracht beschreven:

Veld Type Beschrijving
customAction string De naam van de aangepaste opdracht moet CreateDatabase zijn.
offerThroughput int Inrichten van doorvoer die u hebt ingesteld voor de database. Deze parameter is optioneel.
autoScaleSettings Object Vereist voor de modus voor automatisch schalen. Dit object bevat de instellingen die zijn gekoppeld aan de modus Capaciteit automatisch schalen. U kunt de waarde instellen, waarmee het hoogste aantal aanvraageenheden wordt beschreven waarin de verzameling dynamisch maxThroughput wordt verhoogd.

Uitvoer

Als de opdracht is geslaagd, wordt het volgende antwoord retourneren:

{ "ok" : 1 }

Zie de standaarduitvoer van de aangepaste opdracht voor de parameters in de uitvoer.

Voorbeelden

Een database maken

Gebruik de volgende opdracht om een database met de naam te maken die "test" gebruikmaakt van alle standaardwaarden:

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

Met deze opdracht maakt u een database zonder doorvoer op databaseniveau. Dit betekent dat de verzamelingen in deze database de hoeveelheid doorvoer moeten opgeven die u moet gebruiken.

Een database met doorvoer maken

Gebruik de volgende opdracht om een database met de naam te maken en een inrichtende doorvoer op "test" databaseniveau van 1000 RUs op te geven:

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

Hiermee maakt u een database en stelt u er een doorvoer in. Alle verzamelingen in deze database delen de setdoorvoer, tenzij de verzamelingen worden gemaakt met een specifiek doorvoerniveau.

Een database maken met doorvoer voor automatisch schalen

Gebruik de volgende opdracht om een database met de naam te maken en een maximale doorvoer van "test" 20.000 RU/s automatisch te schalen op databaseniveau:

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

Database bijwerken

Met de opdracht database-extensie bijwerken worden de eigenschappen bijgewerkt die zijn gekoppeld aan de opgegeven database. Het wijzigen van uw database van inrichtende doorvoer in automatisch schalen en omgekeerd wordt alleen ondersteund in Azure Portal. In de volgende tabel worden de parameters in de opdracht beschreven:

Veld Type Beschrijving
customAction string Naam van de aangepaste opdracht. Moet 'UpdateDatabase' zijn.
offerThroughput int Nieuwe inrichtende doorvoer die u wilt instellen voor de database als de database doorvoer op databaseniveau gebruikt
autoScaleSettings Object Vereist voor de modus voor automatisch schalen. Dit object bevat de instellingen die zijn gekoppeld aan de modus Capaciteit automatisch schalen. U kunt de waarde instellen, waarmee het hoogste aantal aanvraageenheden wordt beschreven waarin de database dynamisch maxThroughput wordt verhoogd.

Deze opdracht maakt gebruik van de database die is opgegeven in de context van de sessie. Dit is de database die u hebt gebruikt in de use <database> opdracht . Op dit moment kan de databasenaam niet worden gewijzigd met behulp van deze opdracht.

Uitvoer

Als de opdracht is geslaagd, wordt het volgende antwoord retourneren:

{ "ok" : 1 }

Zie de standaarduitvoer van de aangepaste opdracht voor de parameters in de uitvoer.

Voorbeelden

De inrichtende doorvoer bijwerken die is gekoppeld aan een database

Gebruik de volgende opdracht om de inrichtende doorvoer van een database met de naam bij te werken "test" naar 1200 RUs:

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

De doorvoer voor automatisch schalen bijwerken die is gekoppeld aan een database

Als u de inrichtende doorvoer van een database met de naam wilt bijwerken naar "test" 20.000 RUs of wilt transformeren naar een doorvoerniveau voor automatisch schalen, gebruikt u de volgende opdracht:

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

Database op halen

De database-extensie op te halen opdracht retourneert het databaseobject. De databasenaam wordt gebruikt vanuit de databasecontext waarop de opdracht wordt uitgevoerd.

{
  customAction: "GetDatabase"
}

In de volgende tabel worden de parameters in de opdracht beschreven:

Veld Type Beschrijving
customAction string Naam van de aangepaste opdracht. Moet 'GetDatabase' zijn

Uitvoer

Als de opdracht slaagt, bevat het antwoord een document met de volgende velden:

Veld Type Beschrijving
ok int De status van het antwoord. 1 == geslaagd. 0 == fout.
database string Naam van de database.
provisionedThroughput int Inrichten van doorvoer die is ingesteld op de database als de database gebruikmaakt van handmatige doorvoer op databaseniveau
autoScaleSettings Object Dit object bevat de capaciteitsparameters die zijn gekoppeld aan de database als deze de modus Automatisch schalen gebruikt. De maxThroughput waarde beschrijft het hoogste aantal aanvraageenheden dat de database dynamisch wordt verhoogd.

Als de opdracht mislukt, wordt een standaard aangepast opdrachtreactie geretourneerd. Zie de standaarduitvoer van de aangepaste opdracht voor de parameters in de uitvoer.

Voorbeelden

De database op te halen

Gebruik de volgende opdracht om het databaseobject voor een database met "test" de naam op te halen:

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

Als de database geen bijbehorende doorvoer heeft, is de uitvoer:

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

Als aan de database handmatige doorvoer op databaseniveau is gekoppeld, worden in de uitvoer de volgende provisionedThroughput waarden weer geven:

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

Als aan de database een doorvoer voor automatisch schalen op databaseniveau is gekoppeld, toont de uitvoer de , waarin de minimale RU/s voor de database worden beschreven, en het -object met inbegrip van de , waarmee het maximum aantal RU/s voor de database wordt provisionedThroughput autoScaleSettings maxThroughput beschreven.

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

Verzameling maken

Met de opdracht verzamelingsextensie maken maakt u een nieuwe MongoDB-verzameling. De databasenaam wordt gebruikt vanuit de databasecontext die is ingesteld door de use database opdracht . De indeling van de opdracht CreateCollection is als volgt:

{
  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).
}

In de volgende tabel worden de parameters in de opdracht beschreven:

Veld Type Vereist Beschrijving
customAction string Vereist Naam van de aangepaste opdracht. Moet CreateCollection zijn.
collection string Vereist Naam van de verzameling. Er zijn geen speciale tekens of spaties toegestaan.
offerThroughput int Optioneel In te stellen doorvoer voor de database. Als deze parameter niet is opgegeven, wordt standaard de minimumwaarde 400 RU/s. * Als u een doorvoer wilt opgeven die hoger is dan 10.000 RU/s, is de shardKey parameter vereist.
shardKey string Vereist voor verzamelingen met grote doorvoer Het pad naar de Shard-sleutel voor de shard-verzameling. Deze parameter is vereist als u meer dan 10.000 RU/s in hebt ingesteld. offerThroughput Als deze is opgegeven, hebben alle ingevoegde documenten deze sleutel en waarde nodig.
autoScaleSettings Object Vereist voor de modus voor automatisch schalen Dit object bevat de instellingen die zijn gekoppeld aan de modus Capaciteit automatisch schalen. U kunt de waarde instellen, waarmee het hoogste aantal aanvraageenheden wordt beschreven waarin de verzameling dynamisch maxThroughput wordt verhoogd.
indexes Array Configureer desgewenst indexen. Deze parameter wordt alleen ondersteund voor meer dan 3,6 accounts. Indien aanwezig, is een index op _id vereist. Elke vermelding in de matrix moet een sleutel bevatten van een of meer velden, een naam en kan indexopties bevatten. Als u bijvoorbeeld een unieke samengestelde index voor de velden wilt maken a en deze vermelding wilt b gebruiken: {key: {a: 1, b: 1}, name:"a_1_b_1", unique: true} .

Uitvoer

Retourneert een standaard aangepast opdrachtreactie. Zie de standaarduitvoer van de aangepaste opdracht voor de parameters in de uitvoer.

Voorbeelden

Een verzameling maken met de minimale configuratie

Gebruik de volgende opdracht om een nieuwe verzameling te maken met de naam en "testCollection" de standaardwaarden:

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

Dit resulteert in een nieuwe vaste, niet-geharde verzameling met 400RU/s en een index in het _id veld dat automatisch wordt gemaakt. Dit type configuratie is ook van toepassing bij het maken van nieuwe verzamelingen via de insert() functie . Bijvoorbeeld:

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

Een niet-geharde verzameling maken

Gebruik de volgende opdracht om een niet-geharde verzameling te maken met een naam en een inrichtende doorvoer van "testCollection" 1000 RUs:

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

U kunt een verzameling maken met maximaal 10.000 RU/s als de zonder dat u een offerThroughput shardsleutel hoeft op te geven. Raadpleeg de volgende sectie voor verzamelingen met een grotere doorvoer.

Een shard-verzameling maken

Gebruik de volgende opdracht om een shard-verzameling te maken met een naam en een inrichtende doorvoer van "testCollection" 11.000 RUs en een eigenschap shardkey 'a.b':

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

Voor deze opdracht is nu de parameter vereist, omdat er meer dan shardKey 10.000 RU/s zijn opgegeven in de offerThroughput .

Een niet-geharde verzameling voor automatisch schalen maken

Gebruik de volgende opdracht om een niet-geharde verzameling te maken met de naam die gebruikmaakt van de capaciteit voor automatische schaalsets van doorvoer op 'testCollection' 4000 RU/s:

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

Voor de waarde kunt u een bereik van autoScaleSettings.maxThroughput 4000 RU/s tot 10.000 RU/s opgeven zonder een shardsleutel. Voor een hogere doorvoer voor automatisch schalen moet u de shardKey parameter opgeven.

Een verzameling voor automatisch schalen met sharding maken

Gebruik de volgende opdracht om een shard-verzameling met de naam te maken met een shardsleutel met de naam , en die gebruikmaakt van de capaciteit voor automatische schaalschalen die is ingesteld op 'testCollection' 'a.b' 20.000 RU/s:

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

Verzameling bijwerken

Met de opdracht verzamelingsextensie bijwerken worden de eigenschappen bijgewerkt die zijn gekoppeld aan de opgegeven verzameling. Het wijzigen van uw verzameling van inrichtende doorvoer in automatisch schalen en omgekeerd wordt alleen ondersteund in Azure Portal.

{
  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).
}

In de volgende tabel worden de parameters in de opdracht beschreven:

Veld Type Beschrijving
customAction string Naam van de aangepaste opdracht. Moet 'UpdateCollection' zijn.
collection string Naam van de verzameling.
offerThroughput int In te stellen doorvoer voor de verzameling.
autoScaleSettings Object Vereist voor de modus voor automatisch schalen. Dit object bevat de instellingen die zijn gekoppeld aan de modus Capaciteit automatisch schalen. De maxThroughput waarde beschrijft het hoogste aantal aanvraageenheden waar de verzameling dynamisch wordt verhoogd.
indexes Array Configureer desgewenst indexen. Deze parameter wordt alleen ondersteund voor meer dan 3,6 accounts. Indien aanwezig, worden de bestaande indexen van de verzameling vervangen door de opgegeven set indexen (inclusief het afhaken van indexen). Een index op _id is vereist. Elke vermelding in de matrix moet een sleutel bevatten van een of meer velden, een naam en kan indexopties bevatten. Als u bijvoorbeeld een unieke samengestelde index wilt maken op de velden a en b, gebruikt u deze vermelding: {key: {a: 1, b: 1}, name: "a_1_b_1", unique: true} .

Uitvoer

Retourneert een standaard aangepast opdrachtreactie. Zie de standaarduitvoer van de aangepaste opdracht voor de parameters in de uitvoer.

Voorbeelden

De inrichtende doorvoer bijwerken die is gekoppeld aan een verzameling

Gebruik de volgende opdracht om de inrichtende doorvoer van een verzameling met de naam bij te werken "testCollection" naar 1200 RUs:

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

Verzameling ophalen

De aangepaste opdracht verzameling ophalen retourneert het verzamelingsobject.

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

In de volgende tabel worden de parameters in de opdracht beschreven:

Veld Type Beschrijving
customAction string Naam van de aangepaste opdracht. Moet 'GetCollection' zijn.
collection string Naam van de verzameling.

Uitvoer

Als de opdracht slaagt, bevat het antwoord een document met de volgende velden

Veld Type Beschrijving
ok int De status van het antwoord. 1 == geslaagd. 0 == fout.
database string Naam van de database.
collection string Naam van de verzameling.
shardKeyDefinition document Document met indexspecificatie dat wordt gebruikt als een shardsleutel. Dit is een optionele antwoordparameter.
provisionedThroughput int In te stellen doorvoer voor de verzameling. Dit is een optionele antwoordparameter.
autoScaleSettings Object Dit object bevat de capaciteitsparameters die zijn gekoppeld aan de database als deze de modus Automatisch schalen gebruikt. De maxThroughput waarde beschrijft het hoogste aantal aanvraageenheden dat de verzameling dynamisch wordt verhoogd.

Als de opdracht mislukt, wordt een standaard aangepast opdrachtreactie geretourneerd. Zie de standaarduitvoer van de aangepaste opdracht voor de parameters in de uitvoer.

Voorbeelden

De verzameling ophalen

Gebruik de volgende opdracht om het verzamelingsobject voor een verzameling met "testCollection" de naam op te halen:

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

Als de verzameling een gekoppelde doorvoercapaciteit heeft, bevat deze de waarde provisionedThroughput en is de uitvoer:

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

Als de verzameling een gekoppelde doorvoer voor automatisch schalen heeft, bevat deze het -object met de parameter , waarmee de maximale doorvoer wordt bepaald die de verzameling autoScaleSettings maxThroughput dynamisch zal verhogen. Daarnaast bevat deze ook de waarde , die de minimale doorvoer definieert waarmee deze verzameling wordt beperkt tot als er geen provisionedThroughput aanvragen in de verzameling zijn:

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

Als de verzameling doorvoer op databaseniveaudeelt, in de modus Automatisch schalen of handmatig, is de uitvoer:

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

Wijzigingsstromen parallelliseren

Wanneer u wijzigingsstromen op schaal gebruikt, kunt u de belasting het beste gelijkmatig spreiden. De volgende opdracht retourneert een of meer tokens voor het hervatten van de wijzigingsstroom, die elk overeenkomen met gegevens van één fysieke shard/partitie (meerdere logische shards/partities kunnen bestaan op één fysieke partitie). Elk hervatten-token zorgt ervoor dat watch() alleen gegevens uit die fysieke shard/partitie retourneren.

Door db.collection.watch() aan te roepen op elk hervatten-token (één thread per token), worden wijzigingsstromen efficiënt geschaald.

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

Voorbeeld

Voer de aangepaste opdracht uit om een hervatten-token op te halen voor elke fysieke shard/partitie.

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

Voer een watch()-thread/-proces uit voor elk hervatten-token dat wordt geretourneerd door de aangepaste getChangeStreamTokens-opdracht. Hieronder vindt u een voorbeeld voor één thread.

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)}})

Het document (waarde) in het veld resumeAfter vertegenwoordigt het hervatten-token. watch() retourneert een kiezer voor alle documenten die zijn ingevoegd, bijgewerkt of vervangen door die fysieke partitie sinds de aangepaste getChangeStreamTokens-opdracht is uitgevoerd. Hieronder vindt u een voorbeeld van de geretourneerde gegevens.

{ "_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") }}

Elk geretourneerd document bevat een hervatten-token (ze zijn allemaal hetzelfde voor elke pagina). Dit hervatten-token moet worden opgeslagen en opnieuw worden gebruikt als de thread/het proces is uitgevallen. Dit hervatten-token wordt opgehaald vanaf de locatie waar u was gebleven en ontvangt alleen gegevens van die fysieke partitie.

Standaarduitvoer van een aangepaste opdracht

Als dit niet is opgegeven, bevat een aangepast antwoord een document met de volgende velden:

Veld Type Beschrijving
ok int Status van de reactie. 1 == geslaagd. 0 == fout.
code int Wordt alleen geretourneerd wanneer de opdracht is mislukt (dat wil zeggen ok == 0). Bevat de MongoDB-foutcode. Dit is een optionele antwoordparameter.
errMsg string Wordt alleen geretourneerd wanneer de opdracht is mislukt (dat wil zeggen ok == 0). Bevat een gebruikersvriendelijk foutbericht. Dit is een optionele antwoordparameter.

Bijvoorbeeld:

{ "ok" : 1 }

Volgende stappen

U kunt nu doorgaan met het leren van de volgende Azure Cosmos DB concepten: