{"id":46535,"date":"2022-11-08T10:01:52","date_gmt":"2022-11-08T09:01:52","guid":{"rendered":"https:\/\/kinqsta.com\/dk\/?p=46535&#038;preview=true&#038;preview_id=46535"},"modified":"2023-08-24T11:16:56","modified_gmt":"2023-08-24T10:16:56","slug":"mongodb-opretter-database","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/","title":{"rendered":"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende"},"content":{"rendered":"<p>Baseret p\u00e5 dine krav til din software kan du prioritere fleksibilitet, skalerbarhed, ydeevne eller hastighed. Derfor er udviklere og virksomheder ofte forvirrede, n\u00e5r de v\u00e6lger en database til deres behov. Hvis du har brug for en database, der giver h\u00f8j fleksibilitet og skalerbarhed og dataaggregation til kundeanalyser, kan MongoDB v\u00e6re det rigtige valg for dig!<br \/>\n<br \/>\nI denne artikel vil vi diskutere strukturen af MongoDB-databasen, og hvordan du opretter, overv\u00e5ger og administrerer din database! Lad os komme i gang.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Hvordan er en MongoDB-database opbygget?<\/h2>\n<p>MongoDB er en skemal\u00f8s NoSQL-database. Det betyder, at du ikke angiver en struktur for tabellerne\/databaserne, som du g\u00f8r for SQL-databaser.<\/p>\n<p>Vidste du, at NoSQL-databaser faktisk er hurtigere end <a href=\"https:\/\/kinqsta.com\/blog\/mongodb-vs-mysql\/\">relationelle<\/a> databaser? Dette skyldes egenskaber som indeksering, sharding og aggregeringspipelines. MongoDB er ogs\u00e5 kendt for sin hurtige udf\u00f8relse af foresp\u00f8rgsler. Det er derfor, at den foretr\u00e6kkes af virksomheder som Google, Toyota og Forbes.<\/p>\n<p>Nedenfor vil vi unders\u00f8ge nogle af de vigtigste egenskaber ved MongoDB.<\/p>\n<h3>Dokumenter<\/h3>\n<p>MongoDB har en dokumentdatamodel, der gemmer data som JSON-dokumenter. Dokumenterne mapper naturligt til objekterne i applikationskoden, hvilket g\u00f8r det mere ligetil for udviklere at bruge.<\/p>\n<p>I en tabel i en relationel database skal du tilf\u00f8je en kolonne for at tilf\u00f8je et nyt felt. Det er ikke tilf\u00e6ldet med felter i et JSON-dokument. Felter i et JSON-dokument kan variere fra dokument til dokument, s\u00e5 de vil ikke blive tilf\u00f8jet til hver enkelt post i databasen.<\/p>\n<p>Dokumenter kan lagre strukturer som f.eks. arrays, der kan indlejres i hinanden for at udtrykke hierarkiske relationer. Derudover konverterer MongoDB dokumenter til en bin\u00e6r JSON-type (BSON). Dette sikrer hurtigere adgang og \u00f8get underst\u00f8ttelse af forskellige datatyper som streng, heltal, boolsk tal og meget mere!<\/p>\n<h3>Replika-s\u00e6t<\/h3>\n<p>N\u00e5r du opretter en ny database i MongoDB, opretter systemet automatisk mindst 2 yderligere kopier af dine data. Disse kopier er kendt som &#8220;replikas\u00e6t&#8221;, og de replikerer l\u00f8bende data mellem dem, hvilket sikrer en forbedret tilg\u00e6ngelighed af dine data. De giver ogs\u00e5 beskyttelse mod nedetid under en systemfejl eller planlagt vedligeholdelse.<\/p>\n<h3>Samlinger<\/h3>\n<p>En samling er en gruppe af dokumenter, der er tilknyttet en database. De svarer til tabeller i relationelle databaser.<\/p>\n<p>Samlinger er dog meget mere fleksible. For det f\u00f8rste er de ikke afh\u00e6ngige af et skema. For det andet beh\u00f8ver dokumenterne ikke at v\u00e6re af samme datatype!<\/p>\n<p>Du kan f\u00e5 vist en liste over de samlinger, der h\u00f8rer til en database, ved at bruge kommandoen <code>listCollections<\/code>.<\/p>\n<h3>Aggregeringspipelines<\/h3>\n<p>Du kan bruge denne ramme til at klubbe flere operatorer og udtryk. Den er fleksibel, fordi den giver dig mulighed for at behandle, transformere og analysere data af enhver struktur.<\/p>\n<p>P\u00e5 grund af dette tillader MongoDB hurtige datastr\u00f8mme og funktioner p\u00e5 tv\u00e6rs af 150 operat\u00f8rer og udtryk. Den har ogs\u00e5 flere faser, som f.eks. union-fasen, der fleksibelt s\u00e6tter resultater fra flere samlinger sammen.<\/p>\n<h3>Indekser<\/h3>\n<p>Du kan indeksere ethvert felt i et MongoDB-dokument for at \u00f8ge dets effektivitet og forbedre foresp\u00f8rgselshastigheden. Indeksering sparer tid ved at scanne indekset for at begr\u00e6nse de inspicerede dokumenter. Er det ikke langt bedre end at l\u00e6se hvert dokument i samlingen?<\/p>\n<p>Du kan bruge forskellige indekseringsstrategier, herunder sammensatte indekser p\u00e5 flere felter. Lad os f.eks. sige, at du har flere dokumenter, der indeholder medarbejderens for- og efternavn i separate felter. Hvis du \u00f8nsker at f\u00e5 for- og efternavnet returneret, kan du oprette et indeks, der indeholder b\u00e5de &#8220;Last name&#8221; og &#8220;First name&#8221;. Dette ville v\u00e6re meget bedre end at have et indeks p\u00e5 &#8220;Last name&#8221; og et andet p\u00e5 &#8220;First name&#8221;.<\/p>\n<p>Du kan bruge v\u00e6rkt\u00f8jer som Performance Advisor til at forst\u00e5 yderligere, hvilke foresp\u00f8rgsler der kan drage fordel af indekser.<\/p>\n<h3>Sharding<\/h3>\n<p>Sharding fordeler et enkelt datas\u00e6t p\u00e5 flere databaser. Datas\u00e6ttet kan derefter gemmes p\u00e5 flere maskiner for at \u00f8ge den samlede lagerkapacitet i et system. Dette skyldes, at det opdeler st\u00f8rre datas\u00e6t i mindre stykker og gemmer dem i forskellige dataknudepunkter.<\/p>\n<p>MongoDB deler data p\u00e5 samlingsniveau og fordeler dokumenterne i en samling p\u00e5 tv\u00e6rs af shards i en klynge. Dette sikrer skalerbarhed ved at g\u00f8re det muligt for arkitekturen at h\u00e5ndtere de st\u00f8rste applikationer.<\/p>\n<h2>S\u00e5dan oprettes en MongoDB-database<\/h2>\n<p>Du skal f\u00f8rst installere den rigtige MongoDB-pakke, der passer til dit operativsystem. G\u00e5 til siden &#8216;<a href=\"https:\/\/www.mongodb.com\/try\/download\/community\">Download MongoDB Community Server<\/a>&#8216;. V\u00e6lg den seneste &#8220;version&#8221;, &#8220;pakkeformat&#8221; som zip-fil og &#8220;platform&#8221; som dit OS blandt de tilg\u00e6ngelige muligheder, og klik p\u00e5 &#8220;Download&#8221; som vist nedenfor:<\/p>\n<figure id=\"attachment_134838\" aria-describedby=\"caption-attachment-134838\" style=\"width: 594px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134838 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/MongoDB-Community-Server-Download-Process-1.png\" alt=\"Dette billede viser de tilg\u00e6ngelige muligheder - Version, Platform og Pakke under download af MongoDB Community Server.\" width=\"594\" height=\"814\"><figcaption id=\"caption-attachment-134838\" class=\"wp-caption-text\">MongoDB community server download process. (Billedkilde: <a href=\"https:\/\/www.mongodb.com\/try\/download\/community2\">MongoDB Community Server<\/a>)<\/figcaption><\/figure>\n<p>Processen er ret ligetil, s\u00e5 du vil have MongoDB installeret i dit system p\u00e5 ingen tid!<\/p>\n<p>N\u00e5r du har gennemf\u00f8rt installationen, skal du \u00e5bne din kommandoprompt og skrive <code>mongod -version<\/code> for at bekr\u00e6fte den. Hvis du ikke f\u00e5r f\u00f8lgende output og i stedet ser en r\u00e6kke fejl, skal du muligvis geninstallere den:<\/p>\n<figure id=\"attachment_134839\" aria-describedby=\"caption-attachment-134839\" style=\"width: 507px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134839 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Verifying-MongoDB-Version.png\" alt=\"Dette er et kodestykke til at kontrollere MongoDB-versionen efter installationen.\" width=\"507\" height=\"287\"><figcaption id=\"caption-attachment-134839\" class=\"wp-caption-text\">Kontrollere MongoDB version. (Billedkilde: <a href=\"https:\/\/www.configserverfirewall.com\/mongodb\/check-mongodb-version\/\">configserverfirewall<\/a>)<\/figcaption><\/figure>\n<h3>Brug af MongoDB Shell<\/h3>\n<p>F\u00f8r vi g\u00e5r i gang, skal du sikre dig, at:<\/p>\n<ul>\n<li>Din klient har Transport Layer Security og er p\u00e5 din <a href=\"https:\/\/docs.atlas.mongodb.com\/security\/ip-access-list\/\">IP-tilladelsesliste<\/a>.<\/li>\n<li>Du har en brugerkonto og et password p\u00e5 den \u00f8nskede MongoDB-klynge.<\/li>\n<li>Du har installeret MongoDB p\u00e5 din enhed.<\/li>\n<\/ul>\n<h4>Trin 1: Adgang til MongoDB Shell<\/h4>\n<p>Start MongoDB-serveren ved at f\u00f8lge instruktionerne for hvert OS. For Windows skal du skrive f\u00f8lgende kommando. For andre operativsystemer henvises til MongoDB-dokumentationen.<\/p>\n<pre><code class=\"language-markdown\">net start MongoDB<\/code><\/pre>\n<p>Dette b\u00f8r give f\u00f8lgende output:<\/p>\n<figure id=\"attachment_134840\" aria-describedby=\"caption-attachment-134840\" style=\"width: 512px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134840 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/MongoDB-Server-Initialization.png\" alt=\"Dette er et kodestykke til at initialisere MongoDB-serveren\" width=\"512\" height=\"179\"><figcaption id=\"caption-attachment-134840\" class=\"wp-caption-text\">K\u00f8rer MongoDB server. (Billedkilde: <a href=\"https:\/\/www.c-sharpcorner.com\/article\/configure-a-windows-service-for-mongodb\/\">c-sharpcorner<\/a>)<\/figcaption><\/figure>\n<p>Den foreg\u00e5ende kommando initialiserede MongoDB-serveren. For at k\u00f8re den skal vi indtaste <code>mongo<\/code> i kommandoprompten.<\/p>\n<figure id=\"attachment_134843\" aria-describedby=\"caption-attachment-134843\" style=\"width: 897px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134843 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Running-MongoDB-Server-2.png\" alt=\"Dette er et kodestykke til at k\u00f8re MongoDB-serveren.\" width=\"897\" height=\"343\"><figcaption id=\"caption-attachment-134843\" class=\"wp-caption-text\">K\u00f8rer MongoDB shell. (Billedkilde: <a href=\"https:\/\/www.bmc.com\/blogs\/mongodb-create-database\/\">bmc<\/a>)<\/figcaption><\/figure>\n<p>Her i MongoDB-shellen kan vi udf\u00f8re kommandoer til at oprette databaser, inds\u00e6tte data, redigere data, udstede administrative kommandoer og slette data.<\/p>\n<h4>Trin 2: Opret din database<\/h4>\n<p>I mods\u00e6tning til almindelige relationelle databaser har MongoDB ikke en kommando til oprettelse af database. I stedet er der et n\u00f8gleord kaldet <code>use<\/code>, som skifter til en specificeret database. Hvis databasen ikke findes, oprettes der en ny database, ellers linkes der til den eksisterende database.<\/p>\n<p>For eksempel, for at igangs\u00e6tte en database kaldet &#8220;company&#8221;, skal du indtaste:<\/p>\n<pre><code class=\"language-markdown\">use Company<\/code><\/pre>\n<figure id=\"attachment_134845\" aria-describedby=\"caption-attachment-134845\" style=\"width: 1378px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134845 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Creating-Database-in-MongoDB-1.png\" alt=\"Dette er et kodestykke til at oprette en database i MongoDB.\" width=\"1378\" height=\"547\"><figcaption id=\"caption-attachment-134845\" class=\"wp-caption-text\">Oprettelse af database i MongoDB.<\/figcaption><\/figure>\n<p>Du kan skrive <code>db<\/code> for at bekr\u00e6fte den database, du lige har oprettet i dit system. Hvis den nye database, du har oprettet, vises, har du oprettet forbindelse til den med succes.<\/p>\n<p>Hvis du vil tjekke de eksisterende databaser, skal du skrive <code>show dbs<\/code>, og det vil give dig alle databaserne i dit system:<\/p>\n<figure id=\"attachment_134847\" aria-describedby=\"caption-attachment-134847\" style=\"width: 1369px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134847 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Show-Databases-in-MongoDB-1.png\" alt=\"Dette er et kodestykke til at se de eksisterende databaser i systemet.\" width=\"1369\" height=\"489\"><figcaption id=\"caption-attachment-134847\" class=\"wp-caption-text\">Visning af databaser i MongoDB.<\/figcaption><\/figure>\n<p>Ved installation af MongoDB oprettes som standard admin-, config- og lokale databaser.<\/p>\n<p>Har du bem\u00e6rket, at den database, vi har oprettet, ikke vises? Det er fordi vi ikke har gemt v\u00e6rdier i databasen endnu! Vi vil diskutere inds\u00e6ttelse under afsnittet om databaseadministration.<\/p>\n<h3>Brug af Atlas UI<\/h3>\n<p>Du kan ogs\u00e5 komme i gang med MongoDB&#8217;s databasetjeneste, Atlas. Selv om du muligvis skal betale for at f\u00e5 adgang til nogle funktioner i Atlas, er de fleste databasefunktionaliteter tilg\u00e6ngelige med det gratis niveau. Funktionerne i det gratis niveau er mere end nok til at oprette en MongoDB-database.<\/p>\n<p>F\u00f8r vi g\u00e5r i gang, skal du sikre dig, at:<\/p>\n<ol>\n<li>Din IP er p\u00e5 tilladelseslisten.<\/li>\n<li>Du har en brugerkonto og et password p\u00e5 den \u00f8nskede MongoDB-klynge.<\/li>\n<\/ol>\n<p>For at oprette en MongoDB-database med AtlasUI skal du \u00e5bne et browservindue og logge ind p\u00e5 <a href=\"https:\/\/cloud.mongodb.com\/\">https:\/\/cloud.mongodb.com<\/a>. Fra din klyngeside skal du klikke p\u00e5 <strong>Browse Collections (Gennemse samlinger)<\/strong>. Hvis der ikke er nogen databaser i klyngen, kan du oprette din database ved at klikke p\u00e5 knappen <strong>Add My Own Data (Tilf\u00f8j mine egne data)<\/strong>.<\/p>\n<p>Prompten vil bede dig om at angive et database- og samlingsnavn. N\u00e5r du har givet dem navne, skal du klikke p\u00e5 <strong>Opret<\/strong>, og s\u00e5 er du f\u00e6rdig! Du kan nu indtaste nye dokumenter eller oprette forbindelse til databasen ved hj\u00e6lp af drivere.<\/p>\n<h2>Administration af din MongoDB-database<\/h2>\n<p>I dette afsnit gennemg\u00e5r vi et par smarte m\u00e5der at administrere din MongoDB-database effektivt p\u00e5. Du kan g\u00f8re dette ved enten at bruge MongoDB-kompasset eller gennem samlinger.<\/p>\n<h3>Brug af samlinger<\/h3>\n<p>Mens relationelle databaser besidder veldefinerede tabeller med specificerede datatyper og kolonner, har NoSQL samlinger i stedet for tabeller. Disse samlinger har ingen struktur, og dokumenter kan variere &#8211; du kan have forskellige datatyper og felter uden at skulle matche et andet dokuments format i samme samling.<\/p>\n<p>Lad os for at demonstrere dette oprette en samling kaldet &#8220;Employee&#8221; og tilf\u00f8je et dokument til den:<\/p>\n<pre><code class=\"language-markdown\">db.Employee.insert(\n  {\n   \t\"Employeename\" : \"Chris\",\n   \t\"EmployeeDepartment\" : \"Sales\"\n  }\n)<\/code><\/pre>\n<p>Hvis inds\u00e6ttelsen er vellykket, returneres <code>WriteResult({ \"nInserted\" : 1 })<\/code>:<\/p>\n<figure id=\"attachment_134848\" aria-describedby=\"caption-attachment-134848\" style=\"width: 1366px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134848 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Successful-Insertion-in-MongoDB.png\" alt=\"Dette kodestykke returnerer WriteResult({\" width=\"1366\" height=\"484\"><figcaption id=\"caption-attachment-134848\" class=\"wp-caption-text\">Succesfuld inds\u00e6ttelse i MongoDB.<\/figcaption><\/figure>\n<p>Her henviser &#8220;db&#8221; til den aktuelt tilsluttede database. &#8220;Employee&#8221; er den nyligt oprettede samling p\u00e5 virksomhedsdatabasen.<\/p>\n<p>Vi har ikke indstillet en prim\u00e6r n\u00f8gle her, fordi MongoDB automatisk opretter et prim\u00e6rn\u00f8glefelt kaldet &#8220;_id&#8221; og indstiller en standardv\u00e6rdi til det.<\/p>\n<p>K\u00f8r nedenst\u00e5ende kommando for at tjekke samlingen i JSON-format:<\/p>\n<pre><code class=\"language-markdown\">db.Employee.find().forEach(printjson)<\/code><\/pre>\n<p>Output:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"_id\" : ObjectId(\"63151427a4dd187757d135b8\"),\n  \"Employeename\" : \"Chris\",\n  \"EmployeeDepartment\" : \"Sales\"\n}<\/code><\/pre>\n<p>Du kan \u00e6ndre v\u00e6rdien af standard prim\u00e6rn\u00f8glen, mens &#8220;_id&#8221;-v\u00e6rdien tildeles automatisk. Denne gang inds\u00e6tter vi et andet dokument i databasen &#8220;Employee&#8221; med v\u00e6rdien &#8220;_id&#8221; som &#8220;1&#8221;:<\/p>\n<pre><code class=\"language-markdown\">db.Employee.insert(\n  {  \n   \t\"_id\" : 1,\n   \t\"EmployeeName\" : \"Ava\",\n   \t\"EmployeeDepartment\" : \"Public Relations\"\n  }\n)<\/code><\/pre>\n<p>Ved at k\u00f8re kommandoen <code>db.Employee.find().forEach(printjson)<\/code> f\u00e5r vi f\u00f8lgende output:<\/p>\n<figure id=\"attachment_134851\" aria-describedby=\"caption-attachment-134851\" style=\"width: 1764px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134851 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Primary-Key-for-Documents-in-Collection-1.png\" alt=\"Outputtet viser dokumenterne i medarbejdersamlingen sammen med deres prim\u00e6re n\u00f8gle\" width=\"1764\" height=\"694\"><figcaption id=\"caption-attachment-134851\" class=\"wp-caption-text\">Dokumenter i samlingen med deres prim\u00e6re n\u00f8gle.<\/figcaption><\/figure>\n<p>I ovenst\u00e5ende output er &#8220;_id&#8221;-v\u00e6rdien for &#8220;Ava&#8221; sat til &#8220;1&#8221; i stedet for at blive tildelt en v\u00e6rdi automatisk.<\/p>\n<p>Nu, hvor vi har tilf\u00f8jet v\u00e6rdier til databasen, kan vi kontrollere, om den vises under de eksisterende databaser i vores system ved hj\u00e6lp af f\u00f8lgende kommando:<\/p>\n<pre><code class=\"language-markdown\">show dbs<\/code><\/pre>\n<figure id=\"attachment_134852\" aria-describedby=\"caption-attachment-134852\" style=\"width: 1714px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134852 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/List-of-Databases.png\" alt=\"Outputtet viser medarbejdersamlingen i de eksisterende databaser i vores system.\" width=\"1714\" height=\"460\"><figcaption id=\"caption-attachment-134852\" class=\"wp-caption-text\">Visning af listen over databaser.<\/figcaption><\/figure>\n<p>Og voila! Du har med succes oprettet en database i dit system!<\/p>\n<h3>Brug af MongoDB-kompasset<\/h3>\n<p>Selv om vi kan arbejde med MongoDB-servere fra Mongo-skallen, kan det nogle gange v\u00e6re kedeligt. Du kan opleve dette i et produktionsmilj\u00f8.<\/p>\n<p>Der er dog et kompasv\u00e6rkt\u00f8j (med det passende navn Compass), der er skabt af MongoDB, som kan g\u00f8re det nemmere. Det har en bedre GUI og tilf\u00f8jede funktionaliteter som datavisualisering, pr\u00e6stationsprofilering og CRUD-adgang (create, read, update, delete) til data, databaser og samlinger.<\/p>\n<p>Du kan downloade <a href=\"https:\/\/www.mongodb.com\/docs\/compass\/current\/install\/\">Compass IDE<\/a> til dit operativsystem og installere det med dets enkle proces.<\/p>\n<p>Derefter skal du \u00e5bne programmet og oprette en forbindelse med serveren ved at inds\u00e6tte forbindelsesstrengen. Hvis du ikke kan finde den, kan du klikke p\u00e5 <strong>Fill in connection fields individually (Udfyld forbindelsesfelter individuelt)<\/strong>. Hvis du ikke \u00e6ndrede portnummeret, mens du installerede MongoDB, skal du blot klikke p\u00e5 forbindelsesknappen, og s\u00e5 er du inde! Ellers skal du blot indtaste de v\u00e6rdier, du har indstillet, og klikke p\u00e5 <strong>Connect (Forbind)<\/strong>.<\/p>\n<figure id=\"attachment_134854\" aria-describedby=\"caption-attachment-134854\" style=\"width: 1384px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134854 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/New-Connection-Window-in-MongoDB-1.png\" alt=\"Dette billede viser vinduet Ny forbindelse, hvor du kan v\u00e6lge at inds\u00e6tte forbindelses-url'en.\" width=\"1384\" height=\"535\"><figcaption id=\"caption-attachment-134854\" class=\"wp-caption-text\">vinduet Ny forbindelse i MongoDB.. (Image source: <a href=\"https:\/\/www.mongodb.com\/docs\/compass\/current\/connect\/\">mongodb<\/a>)<\/figcaption><\/figure>\n<p>Derefter skal du angive v\u00e6rtsnavn, port og godkendelse i vinduet Ny forbindelse.<\/p>\n<p>I MongoDB Compass kan du oprette en database og tilf\u00f8je dens f\u00f8rste samling samtidig. S\u00e5dan g\u00f8r du det:<\/p>\n<ol>\n<li>Klik p\u00e5 <strong>Create database<\/strong> for at \u00e5bne prompten.<\/li>\n<li>Indtast navnet p\u00e5 databasen og dens f\u00f8rste samling.<\/li>\n<li>Klik p\u00e5 <strong>Create database<\/strong>.<\/li>\n<\/ol>\n<p>Du kan inds\u00e6tte flere dokumenter i din database ved at klikke p\u00e5 databasens navn og derefter klikke p\u00e5 samlingens navn for at se fanen <strong>Documents<\/strong>. Du kan derefter klikke p\u00e5 knappen <strong>Add data<\/strong> for at inds\u00e6tte et eller flere dokumenter i din samling.<\/p>\n<p>N\u00e5r du tilf\u00f8jer dine dokumenter, kan du indtaste dem et ad gangen eller som flere dokumenter i et array. Hvis du tilf\u00f8jer flere dokumenter, skal du sikre, at disse kommaseparerede dokumenter er omsluttet af firkantede parenteser. For eksempel:<\/p>\n<pre><code class=\"language-markdown\">{ _id: 1, item: { name: \"apple\", code: \"123\" }, qty: 15, tags: [ \"A\", \"B\", \"C\" ] },\n{ _id: 2, item: { name: \"banana\", code: \"123\" }, qty: 20, tags: [ \"B\" ] },\n{ _id: 3, item: { name: \"spinach\", code: \"456\" }, qty: 25, tags: [ \"A\", \"B\" ] },\n{ _id: 4, item: { name: \"lentils\", code: \"456\" }, qty: 30, tags: [ \"B\", \"A\" ] },\n{ _id: 5, item: { name: \"pears\", code: \"000\" }, qty: 20, tags: [ [ \"A\", \"B\" ], \"C\" ] },\n{ _id: 6, item: { name: \"strawberry\", code: \"123\" }, tags: [ \"B\" ] }<\/code><\/pre>\n<p>Klik til sidst p\u00e5 <strong>Insert<\/strong> for at tilf\u00f8je dokumenterne til din samling. S\u00e5dan ser et dokumentets krop ud:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"StudentID\" : 1\n  \"StudentName\" : \"JohnDoe\"\n}<\/code><\/pre>\n<p>Her er feltnavnene &#8220;StudentID&#8221; og &#8220;StudentName&#8221;. Feltv\u00e6rdierne er henholdsvis &#8220;1&#8221; og &#8220;JohnDoe&#8221;.<\/p>\n<h3>Nyttige kommandoer<\/h3>\n<p>Du kan administrere disse samlinger ved hj\u00e6lp af kommandoer til rolleadministration og brugeradministration.<\/p>\n<h4>Kommandoer til brugeradministration<\/h4>\n<p>MongoDB-brugerstyringskommandoer indeholder kommandoer, der vedr\u00f8rer brugeren. Vi kan oprette, opdatere og slette brugerne ved hj\u00e6lp af disse kommandoer.<\/p>\n<h5>dropUser<\/h5>\n<p>Denne kommando fjerner en enkelt bruger fra den angivne database. Nedenfor er syntaksen:<\/p>\n<pre><code class=\"language-markdown\">db.dropUser(username, writeConcern)<\/code><\/pre>\n<p>Her er <code>username<\/code> et obligatorisk felt, der angiver navnet p\u00e5 den bruger, der skal fjernes fra databasen. Det valgfri felt <code>writeConcern<\/code> indeholder niveauet af skrivebekymring for fjernelsesoperationen. Skriveinteressen kan bestemmes ved hj\u00e6lp af det valgfrie felt <code>writeConcern<\/code>.<\/p>\n<p>F\u00f8r du sletter en bruger, der har rollen <code>userAdminAnyDatabase<\/code>, skal du sikre dig, at der er mindst \u00e9n anden bruger med brugeradministrationsrettigheder.<\/p>\n<p>I dette eksempel dropper vi brugeren &#8220;user26&#8221; i testdatabasen:<\/p>\n<pre><code class=\"language-markdown\">use test\ndb.dropUser(\"user26\", {w: \"majority\", wtimeout: 4000})<\/code><\/pre>\n<p>Output:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.dropUser(\"user26\", {w: \"majority\", wtimeout: 4000});\ntrue<\/code><\/pre>\n<h5>createUser<\/h5>\n<p>Denne kommando opretter en ny bruger til den angivne database p\u00e5 f\u00f8lgende m\u00e5de:<\/p>\n<pre><code class=\"language-markdown\">db.createUser(user, writeConcern)<\/code><\/pre>\n<p>Her er <code>user<\/code> et obligatorisk felt, der indeholder dokumentet med autentifikations- og adgangsoplysninger om den bruger, der skal oprettes. Det valgfrie felt <code>writeConcern<\/code> indeholder niveauet for skriveinteresse for oprettelsesoperationen. Skriveinteressen kan bestemmes ved hj\u00e6lp af det valgfrie felt <code>writeConcern<\/code>.<\/p>\n<p><code>createUser<\/code> returnerer en fejlmeddelelse om en dobbelt bruger, hvis brugeren allerede findes i databasen.<\/p>\n<p>Du kan oprette en ny bruger i testdatabasen p\u00e5 f\u00f8lgende m\u00e5de:<\/p>\n<pre><code class=\"language-markdown\">use test\ndb.createUser(\n  {\n    user: \"user26\",\n    pwd: \"myuser123\",\n    roles: [ \"readWrite\" ]  \n  }\n);<\/code><\/pre>\n<p>Du kan oprette en ny bruger p\u00e5 f\u00f8lgende m\u00e5de: Du kan oprette en ny bruger p\u00e5 f\u00f8lgende m\u00e5de: Output er som f\u00f8lger:<\/p>\n<pre><code class=\"language-markdown\">Successfully added user: { \"user\" : \"user26\", \"roles\" : [ \"readWrite\", \"dbAdmin\" ] }<\/code><\/pre>\n<h5>grantRolesToUser<\/h5>\n<p>Du kan bruge denne kommando til at tildele yderligere roller til en bruger. Hvis du vil bruge den, skal du huske f\u00f8lgende syntaks:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    grantRolesToUser: \"&lt;user&gt;\",\n    roles: [ &lt;roles&gt; ],\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>Du kan angive b\u00e5de brugerdefinerede og indbyggede roller i de ovenn\u00e6vnte roller. Hvis du vil angive en rolle, der findes i den samme database, som <code>grantRolesToUser<\/code> k\u00f8rer, kan du enten angive rollen med et dokument, som n\u00e6vnt nedenfor:<\/p>\n<pre><code class=\"language-markdown\">{ role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" }<\/code><\/pre>\n<p>Eller du kan blot angive rollen med rollens navn. F.eks:<\/p>\n<pre><code class=\"language-markdown\">\"readWrite\"<\/code><\/pre>\n<p>Hvis du vil angive den rolle, der findes i en anden database, skal du angive rollen med et andet dokument.<\/p>\n<p>Hvis du vil tildele en rolle i en database, skal du bruge handlingen <code>grantRole<\/code> i den angivne database.<\/p>\n<p>Her er et eksempel for at give dig et klart billede. Tag f.eks. en bruger productUser00 i produktdatabasen med f\u00f8lgende roller:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"assetsWriter\",\n    \"db\" : \"assets\"\n  }\n]<\/code><\/pre>\n<p>Operationen <code>grantRolesToUser<\/code> giver &#8220;productUser00&#8221; rollen <code>readWrite<\/code> i lagerdatabasen og rollen &#8220;read&#8221; i produktdatabasen:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand({\n  grantRolesToUser: \"productUser00\",\n  roles: [\n    { role: \"readWrite\", db: \"stock\"},\n    \"read\"\n  ],\n  writeConcern: { w: \"majority\" , wtimeout: 2000 }\n})<\/code><\/pre>\n<p>Brugeren &#8220;productUser00&#8221; i produktdatabasen har nu f\u00f8lgende roller:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"assetsWriter\",\n    \"db\" : \"assets\"\n  },\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"stock\"\n  },\n  {\n    \"role\" : \"read\",\n    \"db\" : \"products\"\n  }\n]<\/code><\/pre>\n<h5>usersInfo<\/h5>\n<p>Du kan bruge kommandoen <code>usersInfo<\/code> til at returnere oplysninger om en eller flere brugere. Her er syntaksen:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    usersInfo: &lt;various&gt;,\n    showCredentials: &lt;Boolean&gt;,\n    showCustomData: &lt;Boolean&gt;,\n    showPrivileges: &lt;Boolean&gt;,\n    showAuthenticationRestrictions: &lt;Boolean&gt;,\n    filter: &lt;document&gt;,\n    comment: &lt;any&gt; \n  }\n)\n{ usersInfo: &lt;various&gt; }<\/code><\/pre>\n<p>Med hensyn til adgang kan brugere altid se deres egne oplysninger. For at se en anden brugers oplysninger skal den bruger, der k\u00f8rer kommandoen, have rettigheder, der omfatter <code>viewUser<\/code>-handlingen p\u00e5 den anden brugers database.<\/p>\n<p>N\u00e5r du k\u00f8rer kommandoen <code>userInfo<\/code>, kan du f\u00e5 f\u00f8lgende oplysninger afh\u00e6ngigt af de angivne indstillinger:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"users\" : [\n    {\n      \"_id\" : \"&lt;db&gt;.&lt;username&gt;\",\n      \"userId\" : &lt;UUID&gt;, \/\/ Starting in MongoDB 4.0.9\n      \"user\" : \"&lt;username&gt;\",\n      \"db\" : \"&lt;db&gt;\",\n      \"mechanisms\" : [ ... ],  \/\/ Starting in MongoDB 4.0\n      \"customData\" : &lt;document&gt;,\n      \"roles\" : [ ... ],\n      \"credentials\": { ... }, \/\/ only if showCredentials: true\n      \"inheritedRoles\" : [ ... ],  \/\/ only if showPrivileges: true or showAuthenticationRestrictions: true\n      \"inheritedPrivileges\" : [ ... ], \/\/ only if showPrivileges: true or showAuthenticationRestrictions: true\n      \"inheritedAuthenticationRestrictions\" : [ ] \/\/ only if showPrivileges: true or showAuthenticationRestrictions: true\n      \"authenticationRestrictions\" : [ ... ] \/\/ only if showAuthenticationRestrictions: true\n    },\n  ],\n  \"ok\" : 1\n} <\/code><\/pre>\n<p>Nu hvor du har en generel id\u00e9 om, hvad du kan opn\u00e5 med kommandoen <code>usersInfo<\/code>, er det n\u00e6ste sp\u00f8rgsm\u00e5l, der kan dukke op, hvilke kommandoer der kan v\u00e6re nyttige til at se p\u00e5 specifikke brugere og flere brugere?<\/p>\n<p>Her er to praktiske eksempler til at illustrere det samme:<br \/>\nHvis du vil se de specifikke rettigheder og oplysninger for specifikke brugere, men ikke legitimationsoplysningerne, for en bruger &#8220;Anthony&#8221;, der er defineret i databasen &#8220;office&#8221;, skal du udf\u00f8re f\u00f8lgende kommando: &#8220;Anthony&#8221; er defineret i databasen &#8220;office&#8221;:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    usersInfo:  { user: \"Anthony\", db: \"office\" },\n    showPrivileges: true\n  }\n)<\/code><\/pre>\n<p>Hvis du vil se p\u00e5 en bruger i den aktuelle database, kan du kun n\u00e6vne brugeren ved navn. Hvis du f.eks. befinder dig i hjemmedatabasen, og der findes en bruger ved navn &#8220;Timothy&#8221; i hjemmedatabasen, kan du k\u00f8re f\u00f8lgende kommando:<\/p>\n<pre><code class=\"language-markdown\">db.getSiblingDB(\"home\").runCommand(\n  {\n    usersInfo:  \"Timothy\",\n    showPrivileges: true\n  }\n)<\/code><\/pre>\n<p>Derefter kan du bruge et array, hvis du \u00f8nsker at se oplysninger om forskellige brugere. Du kan enten medtage de valgfrie felter <code>showCredentials<\/code> og <code>showPrivileges<\/code>, eller du kan v\u00e6lge at udelade dem. S\u00e5dan ville kommandoen se ud:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand({\nusersInfo: [ { user: \"Anthony\", db: \"office\" }, { user: \"Timothy\", db: \"home\" } ],\n  showPrivileges: true\n})<\/code><\/pre>\n<h5>revokeRolesFromUser<\/h5>\n<p>Du kan bruge kommandoen <code>revokeRolesFromUser<\/code> til at fjerne en eller flere roller fra en bruger i den database, hvor rollerne findes. Kommandoen <code>revokeRolesFromUser<\/code> har f\u00f8lgende syntaks:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    revokeRolesFromUser: \"&lt;user&gt;\",\n    roles: [\n      { role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" } | \"&lt;role&gt;\",\n    ],\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>I den ovenn\u00e6vnte syntaks kan du angive b\u00e5de brugerdefinerede og indbyggede roller i feltet <code>roles<\/code>. I lighed med kommandoen <code>grantRolesToUser<\/code> kan du angive den rolle, du vil tilbagekalde, i et dokument eller bruge dens navn.<\/p>\n<p>For at kunne udf\u00f8re kommandoen <code>revokeRolesFromUser<\/code> med succes skal du have handlingen <code>revokeRole<\/code> p\u00e5 den angivne database.<\/p>\n<p>Her er et eksempel for at understrege pointen. Enheden <code>productUser00<\/code> i produktdatabasen havde f\u00f8lgende roller:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"assetsWriter\",\n    \"db\" : \"assets\"\n  },\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"stock\"\n  },\n  {\n    \"role\" : \"read\",\n    \"db\" : \"products\"\n  }\n]<\/code><\/pre>\n<p>F\u00f8lgende <code>revokeRolesFromUser<\/code>-kommando fjerner to af brugerens roller: &#8220;read&#8221;-rollen fra <code>products<\/code> og <code>assetsWriter<\/code>-rollen fra &#8220;assets&#8221;-databasen:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand( { revokeRolesFromUser: \"productUser00\",\n  roles: [\n    { role: \"AssetsWriter\", db: \"assets\" },\n    \"read\"\n  ],\n  writeConcern: { w: \"majority\" }\n} )<\/code><\/pre>\n<p>Brugeren &#8220;productUser00&#8221; i databasen &#8220;products&#8221; har nu kun \u00e9n rolle tilbage:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"stock\"\n  }\n]<\/code><\/pre>\n<h4>Kommandoer til administration af roller<\/h4>\n<p>Roller giver brugere adgang til ressourcer. Flere indbyggede roller kan bruges af administratorer til at styre adgangen til et MongoDB-system. Hvis rollerne ikke d\u00e6kker de \u00f8nskede privilegier, kan du endda g\u00e5 videre og oprette nye roller i en bestemt database.<\/p>\n<h5>dropRole<\/h5>\n<p>Med kommandoen <code>dropRole<\/code> kan du slette en brugerdefineret rolle fra den database, som du k\u00f8rer kommandoen p\u00e5. Du skal bruge f\u00f8lgende syntaks for at udf\u00f8re denne kommando:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    dropRole: \"&lt;role&gt;\",\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>For at f\u00e5 den korrekt udf\u00f8rt, skal du have handlingen <code>dropRole<\/code> p\u00e5 den angivne database. F\u00f8lgende handlinger ville fjerne rollen <code>writeTags<\/code> fra databasen &#8220;products&#8221;:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand(\n  {\n    dropRole: \"writeTags\",\n    writeConcern: { w: \"majority\" }\n  }\n)<\/code><\/pre>\n<h5>createRole<\/h5>\n<p>Du kan bruge kommandoen <code>createRole<\/code> til at oprette en rolle og angive dens rettigheder. Rollen g\u00e6lder for den database, som du v\u00e6lger at k\u00f8re kommandoen p\u00e5. Kommandoen <code>createRole<\/code> ville returnere en fejl i forbindelse med en dobbeltrolle, hvis rollen allerede findes i databasen.<\/p>\n<p>For at udf\u00f8re denne kommando skal du f\u00f8lge den angivne syntaks:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand(\n  {\n    createRole: \"&lt;new role&gt;\",\n    privileges: [\n      { resource: { &lt;resource&gt; }, actions: [ \"&lt;action&gt;\", ... ] },\n    ],\n    roles: [\n      { role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" } | \"&lt;role&gt;\",\n    ],\n    authenticationRestrictions: [\n      {\n        clientSource: [\"&lt;IP&gt;\" | \"&lt;CIDR range&gt;\", ...],\n        serverAddress: [\"&lt;IP&gt;\" | \"&lt;CIDR range&gt;\", ...]\n      },\n    ],\n    writeConcern: &lt;write concern document&gt;,\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>En rolles privilegier g\u00e6lder for den database, hvor rollen blev oprettet. Rollen kan arve privilegier fra andre roller i den p\u00e5g\u00e6ldende database. En rolle, der er oprettet p\u00e5 databasen &#8220;admin&#8221;, kan f.eks. indeholde privilegier, der g\u00e6lder for enten en klynge eller alle databaser. Den kan ogs\u00e5 arve privilegier fra roller, der findes i andre databaser.<\/p>\n<p>Hvis du vil oprette en rolle i en database, skal du have to ting:<\/p>\n<ol>\n<li><code>grantRole<\/code> handling p\u00e5 denne database for at n\u00e6vne privilegier for den nye rolle samt for at n\u00e6vne roller til at arve fra.<\/li>\n<li>Handlingen <code>createRole<\/code> p\u00e5 denne databaseresource.<\/li>\n<\/ol>\n<p>F\u00f8lgende <code>createRole<\/code>-kommando opretter en <code>clusterAdmin<\/code>-rolle i brugerdatabasen:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand({ createRole: \"clusterAdmin\",\n  privileges: [\n    { resource: { cluster: true }, actions: [ \"addShard\" ] },\n    { resource: { db: \"config\", collection: \"\" }, actions: [ \"find\", \"remove\" ] },\n    { resource: { db: \"users\", collection: \"usersCollection\" }, actions: [ \"update\", \"insert\" ] },\n    { resource: { db: \"\", collection: \"\" }, actions: [ \"find\" ] }\n  ],\n  roles: [\n    { role: \"read\", db: \"user\" }\n  ],\n  writeConcern: { w: \"majority\" , wtimeout: 5000 }\n})<\/code><\/pre>\n<h5>grantRolesToRole<\/h5>\n<p>Med kommandoen <code>grantRolesToRole<\/code> kan du tildele roller til en brugerdefineret rolle. Kommandoen <code>grantRolesToRole<\/code> vil p\u00e5virke roller i den database, hvor kommandoen udf\u00f8res.<\/p>\n<p>Denne <code>grantRolesToRole<\/code>-kommando har f\u00f8lgende syntaks:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    grantRolesToRole: \"&lt;role&gt;\",\n    roles: [\n     { role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" },\n    ],\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>Adgangsrettighederne svarer til adgangsrettighederne for kommandoen <code>grantRolesToUser<\/code> &#8211; du skal have en <code>grantRole<\/code>-handling p\u00e5 en database for at kunne udf\u00f8re kommandoen korrekt.<\/p>\n<p>I det f\u00f8lgende eksempel kan du bruge kommandoen <code>grantRolesToRole<\/code>\u00a0til at opdatere rollen <code>productsReader<\/code> i databasen &#8220;products&#8221; til at arve rettighederne for rollen <code>productsWriter<\/code>:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand(\n  { \n    grantRolesToRole: \"productsReader\",\n    roles: [\n      \"productsWriter\"\n    ],\n    writeConcern: { w: \"majority\" , wtimeout: 5000 }\n  }\n)<\/code><\/pre>\n<h5>revokePrivilegesFromRole<\/h5>\n<p>Du kan bruge <code>revokePrivilegesFromRole<\/code> til at fjerne de angivne privilegier fra den brugerdefinerede rolle i den database, hvor kommandoen udf\u00f8res. For korrekt udf\u00f8relse skal du huske p\u00e5 f\u00f8lgende syntaks:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    revokePrivilegesFromRole: \"&lt;role&gt;\",\n    privileges: [\n      { resource: { &lt;resource&gt; }, actions: [ \"&lt;action&gt;\", ... ] },\n    ],\n    writeConcern: &lt;write concern document&gt;,\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>For at tilbagekalde et privilegium skal m\u00f8nsteret &#8220;resource document&#8221; passe til det p\u00e5g\u00e6ldende privilegiums &#8220;resource&#8221;-felt. &#8220;actions&#8221;-feltet kan enten v\u00e6re et n\u00f8jagtigt match eller en delm\u00e6ngde.<\/p>\n<p>Tag f.eks. rollen <code>manageRole<\/code> i produktdatabasen med f\u00f8lgende privilegier, der angiver databasen &#8220;managers&#8221; som ressource:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"resource\" : {\n    \"db\" : \"managers\",\n    \"collection\" : \"\"\n  },\n  \"actions\" : [\n    \"insert\",\n    \"remove\"\n  ]\n}<\/code><\/pre>\n<p>Du kan ikke tilbagekalde handlingerne &#8220;insert&#8221; eller &#8220;remove&#8221; fra kun \u00e9n samling i managers-databasen. F\u00f8lgende handlinger medf\u00f8rer ingen \u00e6ndring i rollen:<\/p>\n<pre><code class=\"language-markdown\">use managers\ndb.runCommand(\n  {\n    revokePrivilegesFromRole: \"manageRole\",\n    privileges: [\n      {\n        resource : {\n          db : \"managers\",\n          collection : \"kiosks\"\n        },\n        actions : [\n          \"insert\",\n          \"remove\"\n        ]\n      }\n    ]\n  }\n)<\/code><\/pre>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    revokePrivilegesFromRole: \"manageRole\",\n    privileges:\n      [\n        {\n          resource : {\n          db : \"managers\",\n          collection : \"kiosks\"\n        },\n        actions : [\n          \"insert\"\n        ]\n      }\n    ]\n  }\n)<\/code><\/pre>\n<p>For at tilbagekalde &#8220;insert&#8221;- og\/eller &#8220;remove&#8221;-handlingerne fra rollen <code>manageRole<\/code> skal du matche ressourcedokumentet n\u00f8jagtigt. F\u00f8lgende operation tilbagekalder f.eks. kun &#8220;remove&#8221;-handlingen fra det eksisterende privilegium:<\/p>\n<pre><code class=\"language-markdown\">use managers\ndb.runCommand(\n  {\n    revokePrivilegesFromRole: \"manageRole\",\n    privileges:\n      [\n        {\n          resource : {\n            db : \"managers\",\n            collection : \"\"\n        },\n        actions : [ \"remove\" ]\n      }\n    ]\n  }\n)<\/code><\/pre>\n<p>F\u00f8lgende operation fjerner flere rettigheder fra rollen &#8220;executive&#8221; i managers-databasen:<\/p>\n<pre><code class=\"language-markdown\">use managers\ndb.runCommand(\n  {\n    revokePrivilegesFromRole: \"executive\",\n    privileges: [\n      {\n        resource: { db: \"managers\", collection: \"\" },\n        actions: [ \"insert\", \"remove\", \"find\" ]\n      },\n      {\n        resource: { db: \"managers\", collection: \"partners\" },\n        actions: [ \"update\" ]\n      }\n    ],\n    writeConcern: { w: \"majority\" }\n    }\n)<\/code><\/pre>\n<h5>rolesInfo<\/h5>\n<p>Kommandoen <code>rolesInfo<\/code> returnerer oplysninger om privilegier og arv for de angivne roller, herunder b\u00e5de indbyggede og brugerdefinerede roller. Du kan ogs\u00e5 bruge kommandoen <code>rolesInfo<\/code> til at hente alle roller, der er omfattet af en database.<\/p>\n<p>F\u00f8lg denne syntaks for korrekt udf\u00f8relse:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    rolesInfo: { role: &lt;name&gt;, db: &lt;db&gt; },\n    showPrivileges: &lt;Boolean&gt;,\n    showBuiltinRoles: &lt;Boolean&gt;,\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>Hvis du vil returnere oplysninger om en rolle fra den aktuelle database, kan du angive dens navn som f\u00f8lger:<\/p>\n<pre><code class=\"language-markdown\">{ rolesInfo: \"&lt;rolename&gt;\" }<\/code><\/pre>\n<p>Hvis du vil returnere oplysninger om en rolle fra en anden database, kan du n\u00e6vne rollen med et dokument, der n\u00e6vner rollen og databasen:<\/p>\n<pre><code class=\"language-markdown\">{ rolesInfo: { role: \"&lt;rolename&gt;\", db: \"&lt;database&gt;\" } }<\/code><\/pre>\n<p>F\u00f8lgende kommando returnerer f.eks. oplysninger om rollearv for rollen leder, der er defineret i managers-databasen:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n      rolesInfo: { role: \"executive\", db: \"managers\" }\n   }\n)<\/code><\/pre>\n<p>Den n\u00e6ste kommando returnerer oplysninger om rollearv: <code>accountManager<\/code> p\u00e5 den database, som kommandoen udf\u00f8res p\u00e5:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n      rolesInfo: \"accountManager\"\n   }\n)<\/code><\/pre>\n<p>Den f\u00f8lgende kommando returnerer b\u00e5de rettigheder og rollearv for rollen &#8220;executive&#8221; som defineret i databasen managers:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n     rolesInfo: { role: \"executive\", db: \"managers\" },\n     showPrivileges: true\n   }\n)<\/code><\/pre>\n<p>Hvis du vil n\u00e6vne flere roller, kan du bruge et array. Du kan ogs\u00e5 n\u00e6vne hver rolle i arrayet som en streng eller et dokument.<\/p>\n<p>Du b\u00f8r kun bruge en streng, hvis rollen findes i den database, som kommandoen udf\u00f8res i:<\/p>\n<pre><code class=\"language-markdown\">{\n  rolesInfo: [\n    \"&lt;rolename&gt;\",\n    { role: \"&lt;rolename&gt;\", db: \"&lt;database&gt;\" },\n  ]\n}<\/code><\/pre>\n<p>F\u00f8lgende kommando returnerer f.eks. oplysninger om tre roller p\u00e5 tre forskellige databaser:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n    rolesInfo: [\n      { role: \"executive\", db: \"managers\" },\n      { role: \"accounts\", db: \"departments\" },\n      { role: \"administrator\", db: \"products\" }\n    ]\n  }\n)<\/code><\/pre>\n<p>Du kan f\u00e5 vist b\u00e5de rettigheder og rollearv p\u00e5 f\u00f8lgende m\u00e5de:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    rolesInfo: [\n      { role: \"executive\", db: \"managers\" },\n      { role: \"accounts\", db: \"departments\" },\n      { role: \"administrator\", db: \"products\" }\n    ],\n    showPrivileges: true\n  }\n)<\/code><\/pre>\n<h2>Indlejring af MongoDB-dokumenter for bedre ydeevne<\/h2>\n<p>Dokumentdatabaser som MongoDB giver dig mulighed for at definere dit skema i overensstemmelse med dine behov. For at skabe optimale skemaer i MongoDB kan du indlejre dokumenterne. S\u00e5 i stedet for at matche din applikation til en datamodel kan du opbygge en datamodel, der passer til dit brugsscenarie.<\/p>\n<p>Med indlejrede dokumenter kan du <a href=\"https:\/\/kinqsta.com\/blog\/mysql-backup-database\/\">gemme relaterede data<\/a>, som du f\u00e5r adgang til sammen. N\u00e5r du designer skemaer til MongoDB, anbefales det, at du som standard indlejrer dokumenter. Brug kun database-side eller program-side joins og referencer, n\u00e5r det er v\u00e6rd at bruge dem.<\/p>\n<p>S\u00f8rg for, at arbejdsbyrden kan hente et dokument s\u00e5 ofte som n\u00f8dvendigt. Samtidig skal dokumentet ogs\u00e5 have alle de data, det har brug for. Dette er afg\u00f8rende for din applikations ekstraordin\u00e6re ydeevne.<\/p>\n<p>Nedenfor finder du et par forskellige m\u00f8nstre til at indlejre dokumenter:<\/p>\n<h3>M\u00f8nster til indlejrede dokumenter<\/h3>\n<p>Du kan bruge dette til at indlejre selv komplicerede understrukturer i de dokumenter, som de bruges sammen med. Ved at indlejre sammenh\u00e6ngende data i et enkelt dokument kan du mindske antallet af l\u00e6seoperationer, der er n\u00f8dvendige for at hente data. Generelt b\u00f8r du strukturere dit skema s\u00e5ledes, at dit program modtager alle de n\u00f8dvendige oplysninger i en enkelt l\u00e6seoperation. Derfor er den regel, du skal huske p\u00e5 her, at det, der <strong>bruges sammen, skal gemmes sammen<\/strong>.<\/p>\n<h3>M\u00f8nsteret med indlejret delm\u00e6ngde<\/h3>\n<p>Det indlejrede undergruppem\u00f8nster er et hybridtilf\u00e6lde. Du ville bruge det til en separat samling af en lang liste af relaterede elementer, hvor du kan holde nogle af disse elementer ved h\u00e5nden til visning.<\/p>\n<p>Her er et eksempel, der indeholder en liste over filmanmeldinger:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.movie.findOne()\n{   \n  _id: 321475,   \n  title: \"The Dark Knight\"\n}  \n&gt; db.review.find({movie_id: 321475})\n{   \n  _id: 264579,   \n  movie_id: 321475,   \n  stars: 4   \n  text: \"Amazing\"   \n}\n{   \n  _id: 375684,   \n  movie_id: 321475,   \n  stars:5,   \n  text: \"Mindblowing\"\n}<\/code><\/pre>\n<p>Forestil dig tusind lignende anmeldelser, men du har kun t\u00e6nkt dig at vise de to seneste anmeldelser, n\u00e5r du viser en film. I dette scenario giver det mening at gemme denne delm\u00e6ngde som en liste i filmdokumentet:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.movie.findOne({_id: 321475})   \n{   \n  _id: 321475,   \n  title: \"The Dark Knight\",   \n  recent_reviews: [   \n    {_id: 264579, stars: 4, text: \"Amazing\"},   \n    {_id: 375684, stars: 5, text: \"Mindblowing\"}   \n  ]   \n}&lt;\/code<\/code><\/pre>\n<p>Hvis du rutinem\u00e6ssigt har adgang til en delm\u00e6ngde af relaterede elementer, skal du s\u00f8rge for at indlejre den.<\/p>\n<h3>Uafh\u00e6ngig adgang<\/h3>\n<p>Du \u00f8nsker m\u00e5ske at gemme underdokumenter i deres samling for at adskille dem fra deres overordnede samling.<\/p>\n<p>Tag f.eks. en virksomheds produktlinje. Hvis virksomheden s\u00e6lger et lille s\u00e6t produkter, vil du m\u00e5ske gemme dem i virksomhedsdokumentet. Men hvis du vil genbruge dem p\u00e5 tv\u00e6rs af virksomheder eller f\u00e5 direkte adgang til dem via deres lagerholdingsenhed (SKU), skal du ogs\u00e5 gemme dem i deres samling.<\/p>\n<p>Hvis du manipulerer eller f\u00e5r adgang til en enhed uafh\u00e6ngigt, skal du lave en samling for at gemme den separat for at sikre bedste praksis.<\/p>\n<h3>Ubundne lister<\/h3>\n<p>Lagring af korte lister med relaterede oplysninger i deres dokument har en ulempe. Hvis din liste forts\u00e6tter med at vokse ukontrolleret, b\u00f8r du ikke l\u00e6gge den i et enkelt dokument. Det skyldes, at du ikke ville kunne underst\u00f8tte den i s\u00e6rlig lang tid.<\/p>\n<p>Der er to grunde til dette. For det f\u00f8rste har MongoDB en gr\u00e6nse for st\u00f8rrelsen af et enkelt dokument. For det andet, hvis du tilg\u00e5r dokumentet med for mange frekvenser, vil du se negative resultater af ukontrolleret hukommelsesforbrug.<\/p>\n<p>For at sige det enkelt, hvis en liste begynder at vokse ubegr\u00e6nset, skal du lave en samling for at gemme den separat.<\/p>\n<h3>Udvidet referencem\u00f8nster<\/h3>\n<p>Det udvidede referencem\u00f8nster er ligesom undergruppem\u00f8nsteret. Det optimerer ogs\u00e5 oplysninger, som du regelm\u00e6ssigt f\u00e5r adgang til at gemme p\u00e5 dokumentet.<\/p>\n<p>Her udnyttes det i stedet for en liste, n\u00e5r et dokument henviser til et andet dokument, der er til stede i samme samling. Samtidig lagrer det ogs\u00e5 nogle felter fra det andet dokument for at have adgang til dem hurtigt.<\/p>\n<p>For eksempel:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.movie.findOne({_id: 245434})\n{   \n  _id: 245434,   \n  title: \"Mission Impossible 4 - Ghost Protocol\",   \n  studio_id: 924935,   \n  studio_name: \"Paramount Pictures\"   \n}<\/code><\/pre>\n<p>Som du kan se, er &#8220;the studio_id&#8221; gemt, s\u00e5 du kan finde flere oplysninger om det studie, der har lavet filmen. Men studiets navn er ogs\u00e5 kopieret til dette dokument for at g\u00f8re det mere enkelt.<\/p>\n<p>Hvis du vil indlejre oplysninger fra \u00e6ndrede dokumenter regelm\u00e6ssigt, skal du huske at opdatere de dokumenter, hvor du har kopieret oplysningerne, n\u00e5r de \u00e6ndres. Med andre ord, hvis du rutinem\u00e6ssigt har adgang til nogle felter fra et dokument, der er refereret til, skal du indlejre dem.<\/p>\n<h2>S\u00e5dan overv\u00e5ger du MongoDB<\/h2>\n<p>Du kan bruge <a href=\"https:\/\/kinqsta.com\/blog\/apm-tools\/\">overv\u00e5gningsv\u00e6rkt\u00f8jer<\/a> som <a href=\"https:\/\/kinqsta.com\/dk\/apm-tool\/\">Kinsta APM<\/a> til at debugge lange API-opkald, langsomme databaseforesp\u00f8rgsler, lange eksterne URL-foresp\u00f8rgsler, for blot at n\u00e6vne nogle f\u00e5. Du kan endda udnytte kommandoer til at forbedre databasens ydeevne. Du kan ogs\u00e5 bruge dem til at inspicere <a href=\"https:\/\/kinqsta.com\/dk\/blog\/reparerer-wordpress-database\/\">sundheden af dine databaseinstanser<\/a>.<\/p>\n<h3>Hvorfor skal du overv\u00e5ge MongoDB-databaser?<\/h3>\n<p>Et vigtigt aspekt af <a href=\"https:\/\/kinqsta.com\/dk\/mykinsta\/\">planl\u00e6gning af databaseadministration<\/a> er overv\u00e5gning af din klynges ydeevne og sundhed. MongoDB Atlas h\u00e5ndterer st\u00f8rstedelen af administrationsarbejdet gennem sine fejltolerance\/skaleringsevner.<\/p>\n<p>P\u00e5 trods af det skal brugerne vide, hvordan de skal spore klynger. De skal ogs\u00e5 vide, hvordan de skalerer eller justerer alt det, de har brug for, f\u00f8r de rammer en krise.<\/p>\n<p>Ved at overv\u00e5ge MongoDB-databaser kan du:<\/p>\n<ul>\n<li>Overv\u00e5g udnyttelsen af ressourcerne.<\/li>\n<li>Forst\u00e5 den aktuelle kapacitet i din database.<\/li>\n<li>Reager og registrer problemer i realtid for at forbedre din applikations stak.<\/li>\n<li>Observere tilstedev\u00e6relsen af pr\u00e6stationsproblemer og unormal adf\u00e6rd.<\/li>\n<li>Afstemme med dine krav til styring\/databeskyttelse og serviceniveauaftaler (SLA).<\/li>\n<\/ul>\n<h3>Vigtige m\u00e5lepunkter til overv\u00e5gning<\/h3>\n<p>N\u00e5r du overv\u00e5ger MongoDB, er der fire vigtige aspekter, du skal huske p\u00e5:<\/p>\n<h4>MongoDB Hardware Metrics<\/h4>\n<p>Her er de prim\u00e6re metrikker til overv\u00e5gning af hardware:<\/p>\n<h5>Normaliseret proces-CPU<\/h5>\n<p>Det er defineret som den procentdel af den tid, som CPU&#8217;en bruger p\u00e5 applikationssoftware, der vedligeholder MongoDB-processen.<\/p>\n<p>Du kan skalere dette til et interval p\u00e5 0-100% ved at dividere det med antallet af CPU-kerner. Den omfatter CPU, der udnyttes af moduler som f.eks. kerne og bruger.<\/p>\n<p>En h\u00f8j kerne-CPU kan vise, at CPU&#8217;en er opbrugt via operativsystemets operationer. Men brugeren i forbindelse med MongoDB-operationer kan v\u00e6re den grundl\u00e6ggende \u00e5rsag til CPU-udmattelse.<\/p>\n<h5>Normaliseret system-CPU<\/h5>\n<p>Det er den procentdel af tiden, som CPU&#8217;en har brugt p\u00e5 systemopkald til at betjene denne MongoDB-proces. Du kan skalere den til et interval p\u00e5 0-100% ved at dividere den med antallet af CPU-kerner. Den d\u00e6kker ogs\u00e5 den CPU, der bruges af moduler som iowait, user, kernel, steal osv.<\/p>\n<p>Bruger-CPU eller h\u00f8j kerne kan vise CPU-udmattelse gennem MongoDB-operationer (software). H\u00f8j iowait kan v\u00e6re forbundet med udt\u00f8mning af lagerplads, der for\u00e5rsager CPU-udt\u00f8mning.<\/p>\n<h5>Disk IOPS<\/h5>\n<p>Disk IOPS er det gennemsnitlige forbrug af IO-operationer pr. sekund p\u00e5 MongoDB&#8217;s diskpartition.<\/p>\n<h5>Disk Latency<\/h5>\n<p>Dette er diskpartitionens l\u00e6se- og skrivetid p\u00e5 disken i millisekunder i MongoDB. H\u00f8je v\u00e6rdier (&gt;500 ms) viser, at lagringslaget kan p\u00e5virke MongoDB&#8217;s ydeevne.<\/p>\n<h5>Systemhukommelse<\/h5>\n<p>Brug systemhukommelsen til at beskrive den fysiske hukommelsesbytes, der bruges, i forhold til den tilg\u00e6ngelige frie plads.<\/p>\n<p>Den tilg\u00e6ngelige metrik giver en tiln\u00e6rmelsesvis angivelse af antallet af bytes af tilg\u00e6ngelig systemhukommelse. Du kan bruge dette til at udf\u00f8re nye programmer uden swapping.<\/p>\n<h5>Fri diskplads<\/h5>\n<p>Dette er defineret som den samlede m\u00e6ngde bytes af ledig diskplads p\u00e5 MongoDB&#8217;s diskpartition. MongoDB Atlas giver mulighed for automatisk skalering baseret p\u00e5 denne metrik.<\/p>\n<h5>Swap-forbrug<\/h5>\n<p>Du kan udnytte en graf for swap-brug til at beskrive, hvor meget hukommelse der er placeret p\u00e5 swap-enheden. En h\u00f8j brug af metrikken i denne graf viser, at swap-memory bliver udnyttet. Dette viser, at hukommelsen er underforsynet til den aktuelle arbejdsbyrde.<\/p>\n<h4>MongoDB Cluster&#8217;s forbindelses- og driftsm\u00e5linger<\/h4>\n<p>Her er de vigtigste metrikker for Operation og Connection Metrics:<\/p>\n<h5>Operation Execution Times<\/h5>\n<p>Den gennemsnitlige operationstid (skrive- og l\u00e6seoperationer), der udf\u00f8res i den valgte pr\u00f8veperiode.<\/p>\n<h5>Opcounters<\/h5>\n<p>Det er den gennemsnitlige hastighed af udf\u00f8rte operationer pr. sekund i den valgte pr\u00f8veperiode. Grafen\/metrikken Opcounters viser fordelingen af operationer p\u00e5 operationstyper og hastighed for instansen.<\/p>\n<h5>Connections<\/h5>\n<p>Denne m\u00e5leenhed henviser til antallet af \u00e5bne forbindelser til instansen. H\u00f8je spidser eller tal kan pege p\u00e5 en suboptimal forbindelsesstrategi enten fra den server, der ikke reagerer, eller fra klientsiden.<\/p>\n<h5>Targeting queries and query performers<\/h5>\n<p>Dette er den gennemsnitlige hastighed pr. sekund i den valgte pr\u00f8veperiode af scannede dokumenter. For foresp\u00f8rgselsudf\u00f8rere er dette under evaluering af foresp\u00f8rgselsplaner og foresp\u00f8rgsler. For foresp\u00f8rgselsm\u00e5ls\u00e6tning viser forholdet mellem antallet af scannede dokumenter og antallet af returnerede dokumenter.<\/p>\n<p>Et h\u00f8jt talforhold peger p\u00e5 suboptimale operationer. Disse operationer scanner en masse dokumenter for at returnere en mindre del.<\/p>\n<h5>Scan and order<\/h5>\n<p>Den beskriver den gennemsnitlige hastighed pr. sekund i den valgte pr\u00f8veperiode for foresp\u00f8rgsler. Den returnerer sorterede resultater, som ikke kan udf\u00f8re sorteringsoperationen ved hj\u00e6lp af et indeks.<\/p>\n<h5>Queues<\/h5>\n<p>K\u00f8er kan beskrive antallet af operationer, der venter p\u00e5 en l\u00e5s, enten skrive- eller l\u00e6seoperationer. H\u00f8je k\u00f8er kan v\u00e6re et tegn p\u00e5, at skemaet ikke er designet optimalt. Det kan ogs\u00e5 v\u00e6re tegn p\u00e5 modstridende skriveveje, der skaber stor konkurrence om databasens ressourcer.<\/p>\n<h4>MongoDB Replication Metrics<\/h4>\n<p>Her er de prim\u00e6re metrikker til replikeringsoverv\u00e5gning:<\/p>\n<h5>Replication Oplog Window<\/h5>\n<p>Denne metrik viser det omtrentlige antal timer, der er tilg\u00e6ngelige i den prim\u00e6re replikationsoplog. Hvis en sekund\u00e6r replikator halter mere end dette bel\u00f8b, kan den ikke f\u00f8lge med og har brug for en fuld resynkronisering.<\/p>\n<h5>Replication delay<\/h5>\n<p>Replikationsforsinkelse er defineret som det omtrentlige antal sekunder, som en sekund\u00e6r knude er bagud i forhold til den prim\u00e6re knude i skriveoperationer. Et stort replikation delay tyder p\u00e5, at en sekund\u00e6r knude har problemer med at replikere. Det kan p\u00e5virke din operations latenstid i betragtning af forbindelsernes l\u00e6se-\/skriveinteresse.<\/p>\n<h5>Replication room<\/h5>\n<p>Denne m\u00e5leenhed henviser til forskellen mellem den prim\u00e6re replikerings oplogvindue og den sekund\u00e6re replikeringsforsinkelse. Hvis denne v\u00e6rdi g\u00e5r til nul, kan det medf\u00f8re, at en sekund\u00e6r replikation g\u00e5r i RECOVERING-tilstand.<\/p>\n<h5>Opcounters &#8211; repl<\/h5>\n<p>Opcounters &#8211; repl er defineret som den gennemsnitlige hastighed af replikationsoperationer, der udf\u00f8res pr. sekund i den valgte pr\u00f8veperiode. Med opcounters &#8211; graph\/metric kan du se p\u00e5 operationshastigheden og fordelingen af operationstyperne for den angivne instans.<\/p>\n<h5>Oplog GB\/time<\/h5>\n<p>Dette er defineret som den gennemsnitlige hastighed af gigabyte oplog, som den prim\u00e6re genererer pr. time. Store uventede m\u00e6ngder af oplog kan tyde p\u00e5 en meget utilstr\u00e6kkelig skrivearbejdsbyrde eller et problem med skemadesignet.<\/p>\n<h3>V\u00e6rkt\u00f8jer til overv\u00e5gning af MongoDB&#8217;s ydeevne<\/h3>\n<p>MongoDB har indbyggede brugergr\u00e6nsefladev\u00e6rkt\u00f8jer i Cloud Manager, Atlas og Ops Manager til overv\u00e5gning af ydeevne. Det giver ogs\u00e5 nogle uafh\u00e6ngige kommandoer og v\u00e6rkt\u00f8jer til at se p\u00e5 mere r\u00e5baserede data. Vi vil tale om nogle v\u00e6rkt\u00f8jer, som du kan k\u00f8re fra en host, der har adgang og passende roller til at kontrollere dit milj\u00f8:<\/p>\n<h4>mongotop<\/h4>\n<p>Du kan udnytte denne kommando til at spore den tid, som en MongoDB-instans bruger p\u00e5 at skrive og l\u00e6se data pr. samling. Brug f\u00f8lgende syntaks:<\/p>\n<pre><code class=\"language-markdown\">mongotop &lt;options&gt; &lt;connection-string&gt; &lt;polling-interval in seconds&gt;<\/code><\/pre>\n<h4>rs.status()<\/h4>\n<p>Denne kommando returnerer replikas\u00e6tstatus. Den udf\u00f8res fra synspunktet for det medlem, hvor metoden udf\u00f8res.<\/p>\n<h4>mongostat<\/h4>\n<p>Du kan bruge kommandoen <code>mongostat<\/code> til at f\u00e5 et hurtigt overblik over status for din MongoDB-serverinstans. For at opn\u00e5 et optimalt output kan du bruge den til at overv\u00e5ge en enkelt instans for en bestemt begivenhed, da den giver et realtidsbillede.<\/p>\n<p>Udnyt denne kommando til at overv\u00e5ge grundl\u00e6ggende serverstatistik s\u00e5som l\u00e5sek\u00f8er, operationsfordeling, MongoDB-hukommelsesstatistik og forbindelser\/netv\u00e6rk:<\/p>\n<pre><code class=\"language-markdown\">mongostat &lt;options&gt; &lt;connection-string&gt; &lt;polling interval in seconds&gt;<\/code><\/pre>\n<h4>dbStats<\/h4>\n<p>Denne kommando returnerer lagerstatistikker for en bestemt database, f.eks. antallet af indekser og deres st\u00f8rrelse, samlede indsamlingsdata i forhold til lagerst\u00f8rrelse og indsamlingsrelaterede statistikker (antal samlinger og dokumenter).<\/p>\n<h4>db.serverStatus()<\/h4>\n<p>Du kan udnytte kommandoen <code>db.serverStatus()<\/code> til at f\u00e5 et overblik over databasens tilstand. Den giver dig et dokument, der repr\u00e6senterer den aktuelle instans metriske t\u00e6llere. Udf\u00f8r denne kommando med j\u00e6vne mellemrum for at samle statistikker om instansen.<\/p>\n<h4>collStats<\/h4>\n<p>Kommandoen <code>collStats<\/code> indsamler statistikker svarende til dem, der tilbydes af <code>dbStats<\/code> p\u00e5 samlingsniveau. Dens output best\u00e5r af en opt\u00e6lling af objekter i samlingen, m\u00e6ngden af diskplads, som samlingen bruger, samlingens st\u00f8rrelse og oplysninger om dens indekser for en given samling.<\/p>\n<p>Du kan bruge alle disse kommandoer til at tilbyde rapportering og overv\u00e5gning af databaseserveren i realtid, s\u00e5 du kan overv\u00e5ge databasens ydeevne og fejl og hj\u00e6lpe med at tr\u00e6ffe informerede beslutninger om at forfine en database.<\/p>\n<h2>S\u00e5dan Slettes en MongoDB Database<\/h2>\n<p>For at slette en database, du har oprettet i MongoDB, skal du oprette forbindelse til den via et keyword&#8217;s use.<\/p>\n<p>Lad os sige, at du har oprettet en database ved navn &#8220;Engineers&#8221;. For at oprette forbindelse til databasen skal du bruge f\u00f8lgende kommando:<\/p>\n<pre><code class=\"language-markdown\">use Engineers<\/code><\/pre>\n<p>Derefter skriver du <code>db.dropDatabase()<\/code> for at fjerne denne database. Efter udf\u00f8relsen er dette det resultat, du kan forvente:<\/p>\n<pre><code class=\"language-markdown\">{ \"dropped\"  :  \"Engineers\", \"ok\" : 1 }<\/code><\/pre>\n<p>Du kan k\u00f8re kommandoen <code>showdbs<\/code> for at kontrollere, om databasen stadig eksisterer.<\/p>\n<h2>Opsummering<\/h2>\n<p>Hvis du vil presse hver eneste dr\u00e5be v\u00e6rdi ud af MongoDB, skal du have en st\u00e6rk forst\u00e5else af de grundl\u00e6ggende principper. Derfor er det centralt at kende MongoDB-databaser som din egen h\u00e5ndryg. Dette kr\u00e6ver, at du f\u00f8rst g\u00f8r dig bekendt med metoderne til at <a href=\"https:\/\/kinqsta.com\/dk\/devkinsta\/\">oprette en database<\/a>.<br \/>\n<br \/>\nI denne artikel kaster vi lys over de forskellige metoder, du kan bruge til at oprette en database i MongoDB, efterfulgt af en detaljeret beskrivelse af nogle smarte MongoDB-kommandoer, s\u00e5 du kan holde styr p\u00e5 dine databaser. Endelig afrundede vi diskussionen ved at diskutere, hvordan du kan udnytte indlejrede dokumenter og v\u00e6rkt\u00f8jer til overv\u00e5gning af ydeevne i MongoDB for at sikre, at din arbejdsgang fungerer optimalt effektivt.<\/p>\n<p>Hvad er din holdning til disse MongoDB-kommandoer? Gik vi glip af et aspekt eller en metode, som du gerne ville have set her? Lad os vide det i kommentarerne!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Baseret p\u00e5 dine krav til din software kan du prioritere fleksibilitet, skalerbarhed, ydeevne eller hastighed. Derfor er udviklere og virksomheder ofte forvirrede, n\u00e5r de v\u00e6lger en &#8230;<\/p>\n","protected":false},"author":117,"featured_media":47200,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[182,492,197,38],"topic":[746],"class_list":["post-46535","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-mongodb","tag-web-development","tag-webdev","topic-web-udviklingsvaerktoejer"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende<\/title>\n<meta name=\"description\" content=\"For at f\u00e5 en bedre forst\u00e5else af MongoDB skal du vide, hvordan du opretter databaser i MongoDB, startende med MongoDB Create Database-kommandoen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/\" \/>\n<meta property=\"og:locale\" content=\"da_DK\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende\" \/>\n<meta property=\"og:description\" content=\"For at f\u00e5 en bedre forst\u00e5else af MongoDB skal du vide, hvordan du opretter databaser i MongoDB, startende med MongoDB Create Database-kommandoen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-08T09:01:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-24T10:16:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"For at f\u00e5 en bedre forst\u00e5else af MongoDB skal du vide, hvordan du opretter databaser i MongoDB, startende med MongoDB Create Database-kommandoen.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_dk\" \/>\n<meta name=\"twitter:label1\" content=\"Skrevet af\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimeret l\u00e6setid\" \/>\n\t<meta name=\"twitter:data2\" content=\"30 minutter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinqsta.com\/dk\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende\",\"datePublished\":\"2022-11-08T09:01:52+00:00\",\"dateModified\":\"2023-08-24T10:16:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/\"},\"wordCount\":5846,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png\",\"keywords\":[\"database\",\"MongoDB\",\"web development\",\"webdev\"],\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/\",\"url\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/\",\"name\":\"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png\",\"datePublished\":\"2022-11-08T09:01:52+00:00\",\"dateModified\":\"2023-08-24T10:16:56+00:00\",\"description\":\"For at f\u00e5 en bedre forst\u00e5else af MongoDB skal du vide, hvordan du opretter databaser i MongoDB, startende med MongoDB Create Database-kommandoen.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#breadcrumb\"},\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png\",\"width\":1460,\"height\":730,\"caption\":\"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/dk\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webudviklingsv\u00e6rkt\u00f8jer\",\"item\":\"https:\/\/kinqsta.com\/dk\/emner\/web-udviklingsvaerktoejer\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/dk\/#website\",\"url\":\"https:\/\/kinqsta.com\/dk\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Hurtig, sikker, premium hostingl\u00f8sninger\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/dk\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"da-DK\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/dk\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/dk\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinqsta.com\/dk\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/dk\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\",\"https:\/\/x.com\/kinsta_dk\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinqsta.com\/dk\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinqsta.com\/dk\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinqsta.com\/dk\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende","description":"For at f\u00e5 en bedre forst\u00e5else af MongoDB skal du vide, hvordan du opretter databaser i MongoDB, startende med MongoDB Create Database-kommandoen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/","og_locale":"da_DK","og_type":"article","og_title":"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende","og_description":"For at f\u00e5 en bedre forst\u00e5else af MongoDB skal du vide, hvordan du opretter databaser i MongoDB, startende med MongoDB Create Database-kommandoen.","og_url":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","article_published_time":"2022-11-08T09:01:52+00:00","article_modified_time":"2023-08-24T10:16:56+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"For at f\u00e5 en bedre forst\u00e5else af MongoDB skal du vide, hvordan du opretter databaser i MongoDB, startende med MongoDB Create Database-kommandoen.","twitter_image":"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png","twitter_creator":"@salmanravoof","twitter_site":"@kinsta_dk","twitter_misc":{"Skrevet af":"Salman Ravoof","Estimeret l\u00e6setid":"30 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinqsta.com\/dk\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende","datePublished":"2022-11-08T09:01:52+00:00","dateModified":"2023-08-24T10:16:56+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/"},"wordCount":5846,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/dk\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png","keywords":["database","MongoDB","web development","webdev"],"inLanguage":"da-DK","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/","url":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/","name":"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende","isPartOf":{"@id":"https:\/\/kinqsta.com\/dk\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png","datePublished":"2022-11-08T09:01:52+00:00","dateModified":"2023-08-24T10:16:56+00:00","description":"For at f\u00e5 en bedre forst\u00e5else af MongoDB skal du vide, hvordan du opretter databaser i MongoDB, startende med MongoDB Create Database-kommandoen.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#breadcrumb"},"inLanguage":"da-DK","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/"]}]},{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#primaryimage","url":"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png","contentUrl":"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/11\/mongodb-opretter-database.png","width":1460,"height":730,"caption":"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende"},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/dk\/blog\/mongodb-opretter-database\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/dk\/"},{"@type":"ListItem","position":2,"name":"Webudviklingsv\u00e6rkt\u00f8jer","item":"https:\/\/kinqsta.com\/dk\/emner\/web-udviklingsvaerktoejer\/"},{"@type":"ListItem","position":3,"name":"S\u00e5dan opretter du en MongoDB-database: 6 kritiske aspekter du skal kende"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/dk\/#website","url":"https:\/\/kinqsta.com\/dk\/","name":"Kinsta\u00ae","description":"Hurtig, sikker, premium hostingl\u00f8sninger","publisher":{"@id":"https:\/\/kinqsta.com\/dk\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/dk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"da-DK"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/dk\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/dk\/","logo":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinqsta.com\/dk\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/dk\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","https:\/\/x.com\/kinsta_dk","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinqsta.com\/dk\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinqsta.com\/dk\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinqsta.com\/dk\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/posts\/46535","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/comments?post=46535"}],"version-history":[{"count":11,"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/posts\/46535\/revisions"}],"predecessor-version":[{"id":51136,"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/posts\/46535\/revisions\/51136"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/translations\/dk"},{"href":"https:\/\/kinqsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/46535\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/media\/47200"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/media?parent=46535"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/tags?post=46535"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/dk\/wp-json\/wp\/v2\/topic?post=46535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}