sql >> Databáze >  >> NoSQL >> MongoDB

Jak odebrat pole z dokumentu MongoDB ($unset)

V MongoDB můžete použít $unset operátor aktualizace polí pro úplné odstranění pole z dokumentu.

$unset Operátor je navržen speciálně k odstranění pole a jeho hodnoty z dokumentu.

Příklad

Předpokládejme, že máme sbírku nazvanou dogs s následujícími dokumenty:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }

A předpokládejme, že chceme odstranit type pole (a jeho příslušnou hodnotu) ze všech dokumentů.

Můžeme to udělat:

db.dogs.updateMany(
   { },
   { $unset: { type: "" } }
)

Výstup:

{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }

To nám říká, že se shodovaly čtyři dokumenty (protože jsme jako první argument použili prázdný dokument dotazu) a čtyři byly aktualizovány.

Nyní znovu zkontrolujeme sbírku:

db.dogs.find()

Výsledek:

{ "_id" : 1, "name" : "Wag", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "weight" : 30 }

Vidíme, že type pole bylo zcela odstraněno z každého dokumentu.

Všimněte si, že zadaná hodnota v $unset výraz (tj. „“) nemá na operaci vliv.

Odebrat více polí

Můžete zadat více polí k odstranění tak, že je oddělíte čárkou.

Příklad:

db.dogs.updateMany(
   { },
   { $unset: { name: "", weight: "" } }
)

Výstup:

{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }

Zkontrolujte sbírku:

db.dogs.find()

Výsledek:

{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 6 }
{ "_id" : 7 }

Nyní pouze _id pole jsou ponechána.

Vložené dokumenty

K odstranění polí z vložených dokumentů můžete použít tečkovou notaci.

Předpokládejme, že máme sbírku nazvanou pets s následujícím dokumentem:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20,
		"awards" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		}
	}
}

A předpokládejme, že chceme odstranit awards pole z dokumentu.

Můžeme to udělat:

db.pets.updateMany(
   { _id: 1 },
   { $unset: { "details.awards": "" } }
)

Výstup:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Nyní zkontrolujeme dokument:

db.pets.findOne()

Výsledek:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20
	}
}

awards pole a jeho hodnota (která byla sama o sobě vloženým dokumentem) byla z dokumentu odstraněna.


  1. Existuje způsob, jak vyprázdnit cluster, aby byly všechny klíče z master a slave odstraněny z databáze

  2. Stránkování Redis Hash

  3. MongoDB $trim

  4. Návrh datové struktury Redis pro třídění hodnot na základě času