sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan fjerner du et felt fra et MongoDB-dokument ($unset)

I MongoDB kan du bruge $unset feltopdateringsoperatør for fuldstændigt at fjerne et felt fra et dokument.

$unset operator er designet specifikt til at slette et felt og dets værdi fra dokumentet.

Eksempel

Antag, at vi har en samling kaldet dogs med følgende dokumenter:

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

Og antag, at vi vil fjerne type felt (og dets respektive værdi) fra alle dokumenter.

Vi kan gøre dette:

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

Output:

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

Dette fortæller os, at fire dokumenter matchede (fordi vi brugte et tomt forespørgselsdokument som det første argument), og fire blev opdateret.

Lad os nu tjekke samlingen igen:

db.dogs.find()

Resultat:

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

Vi kan se, at type felt er blevet fuldstændig fjernet fra hvert dokument.

Bemærk, at den angivne værdi i $unset udtryk (dvs. "") påvirker ikke handlingen.

Fjern flere felter

Du kan angive flere felter, der skal fjernes, ved at adskille dem med et komma.

Eksempel:

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

Output:

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

Tjek samlingen:

db.dogs.find()

Resultat:

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

Nu kun _id felter er tilbage.

Indlejrede dokumenter

Du kan bruge punktnotation til at fjerne felter fra indlejrede dokumenter.

Antag, at vi har en samling kaldet pets med følgende dokument:

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

Og antag, at vi vil fjerne awards felt fra dokumentet.

Vi kan gøre dette:

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

Output:

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

Lad os nu tjekke dokumentet:

db.pets.findOne()

Resultat:

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

awards felt og dets værdi (som i sig selv var et indlejret dokument) er blevet fjernet fra dokumentet.


  1. Introduktion til Redis-datastrukturer:Sorterede sæt

  2. Hvordan implementerer man has_many :gennem relationer med Mongoid og mongodb?

  3. Lancering af ElastiCache-integration

  4. Mongodb findAndModify node js