sql >> Database >  >> NoSQL >> MongoDB

Een index maken met een specifieke naam in MongoDB

Wanneer u een index maakt in MongoDB en u er geen naam voor opgeeft, wijst MongoDB er een toe.

De standaardnaam bestaat uit elke geïndexeerde veldnaam die is samengevoegd met de sleutelwaarde voor dat veld. Bijvoorbeeld de sorteervolgorde, of als het een text . is index, de string _text , of als het een 2dsphere . is index, de string _2dsphere , enz.

Maar u kunt uw eigen naam toewijzen bij het maken van indexen in MongoDB.

De standaardnaam

Stel dat we een index als deze maken:

db.employees.createIndex(
  { 
    name: 1, 
    salary: -1 }
  )

We hebben geen naam gespecificeerd, dus MongoDB zal er automatisch een genereren op basis van de indexspecificatie.

We gebruiken getIndexes() om dit te verifiëren:

db.employees.getIndexes()

Resultaat:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"name" : 1,
			"salary" : -1
		},
		"name" : "name_1_salary_-1"
	}
]

Er zijn hier twee indexen. De eerste is de standaard _id index die automatisch wordt aangemaakt met de collectie. De tweede is degene die we zojuist hebben gemaakt.

In dit geval gaf MongoDB de index de naam name_1_salary_-1 .

Als we deze index ooit moeten laten vallen, moeten we ofwel de naam of de definitie ervan onthouden. Aangezien de standaardnaam is gebaseerd op de definitie, kan het een beetje onpraktisch worden als je een complexere definitie hebt.

In ieder geval kunnen we de bovenstaande index als volgt laten vallen:

db.employees.dropIndex("name_1_salary_-1")

Geef een naam op

Als we onze eigen naam voor de index hadden willen maken, hadden we deze als volgt kunnen maken:

db.employees.createIndex(
  { 
    name: 1,
    salary: -1 
  },
  { 
    name: "employee_salary" 
    }
)

Het enige wat we deden was een name . toevoegen veld binnen een optioneel document voor het leveren van opties voor de index.

Als we nu de index controleren, kunnen we zien dat deze de naam heeft die we hebben opgegeven:

db.employees.getIndexes()

Resultaat:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"name" : 1,
			"salary" : -1
		},
		"name" : "employee_salary"
	}
]

Inclusief de naam met andere opties

In het vorige voorbeeld is de name veld is de enige optie die we hebben gegeven bij het maken van de index. De naam is niet de enige optie die u voor een index kunt opgeven.

U kunt ook andere opties opgeven, zoals de standaardtaal, taaloverschrijving, enz. Alle andere opties moeten in hetzelfde document worden ingesloten, gescheiden door een komma.

Hier is een voorbeeld van het maken van een index met twee andere opties (maar zonder de naam op te geven):

db.sitcoms.createIndex( 
  { 
    "original_name": "text",
    "translations.sitcom_name": "text"
  },
  {
    "default_language": "danish",
    "language_override": "sprog"
  }
)

Dit is een andere index op een andere collectie dan de vorige. Maar je kunt zien dat we onze eigen default_language hebben gespecificeerd en een language_override waarden. Het is ook een samengestelde index (het is een index die meerdere velden bevat).

Ik heb geen naam opgegeven, dus we kunnen zien hoe lang de naam wordt met zo'n index:

db.employees.getIndexes()

Resultaat:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "original_name_text_translations.sitcom_name_text",
		"default_language" : "danish",
		"language_override" : "sprog",
		"weights" : {
			"original_name" : 1,
			"translations.sitcom_name" : 1
		},
		"textIndexVersion" : 3
	}
]

Dus in dit geval gaf MongoDB de index de standaardnaam original_name_text_translations.sitcom_name_text , want dat is afgeleid van onze indexdefinitie.

We zouden de volgende code moeten gebruiken om deze index op naam neer te zetten:

db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")

Om de naam in zo'n index op te nemen, kunnen we deze leveren in hetzelfde document dat we hebben gebruikt om de standaardtaal en taaloverschrijving op te geven.

Dus we zouden de index als volgt kunnen maken:

db.sitcoms.createIndex( 
  { 
    "original_name": "text",
    "translations.sitcom_name": "text"
  },
  {
    "default_language": "danish",
    "language_override": "sprog",
    "name": "sitcoms_da"
  }
)

In dit geval gebruikten we sitcoms_da als de indexnaam.

Als we nu een lijst met indexen krijgen, kunnen we onze opgegeven naam zien:

db.sitcoms.getIndexes()

Resultaat:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "sitcoms_da",
		"default_language" : "danish",
		"language_override" : "sprog",
		"weights" : {
			"original_name" : 1,
			"translations.sitcom_name" : 1
		},
		"textIndexVersion" : 3
	}
]

  1. Caching in Django met Redis

  2. Veld bijwerken met de waarde van een ander veld in het document

  3. Mongos installeren/instellen in elastische bonenstaak

  4. Mongodb vondst's terugkerende documentbestelling