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

Omdøb et felt i forespørgselsresultaterne i MongoDB

Nogle gange, når du forespørger på en samling i MongoDB, er du måske ikke tilfreds med feltnavnene. Som standard er feltnavnene blot en afspejling af feltnavnene i de faktiske dokumenter.

Måske er feltnavnene inkonsistente, eller der er en tastefejl. Uanset årsagen kan du bruge $project aggregeringspipelinestadiet for at omdøbe et felt i dine forespørgselsresultater.

På nogle måder kan dette sammenlignes med at bruge et alias i SQL, da det ikke omdøber de underliggende felter, det omdøber dem blot i forespørgselsresultaterne.

Eksempel

Antag, at vi returnerer indholdet af en samling som denne:

db.employees.find()

Resultat:

{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Chris", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }

Her bruger vi find() metode til at returnere indholdet af samlingen.

I dette tilfælde returneres navnene på hvert felt i resultaterne.

Men hvad nu hvis vi ville have feltnavnene til at være anderledes? For eksempel, hvad hvis vi vil erstatte navn med medarbejder ?

I så fald kunne vi bruge aggregate() metode til at udføre en forespørgsel som denne:

db.employees.aggregate([
  { "$project": { "employee": "$name", "salary": 1 }}
])

Resultat:

{ "_id" : 2, "salary" : 128000, "employee" : "Sarah" }
{ "_id" : 3, "salary" : 25000, "employee" : "Fritz" }
{ "_id" : 4, "salary" : 45000, "employee" : "Chris" }
{ "_id" : 5, "salary" : 82000, "employee" : "Beck" }

Bemærk, at MongoDB viser felterne i rækkefølgen af ​​indsættelse, hvilket resulterer i løn feltet præsenteres foran medarbejderen Mark. Hvis det er uacceptabelt, kan vi altid ændre forespørgslen til dette:

db.employees.aggregate([
  { "$project": { "employee": "$name", "salary": "$salary" }}
])

Resultat:

{ "_id" : 2, "employee" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "employee" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "employee" : "Chris", "salary" : 45000 }
{ "_id" : 5, "employee" : "Beck", "salary" : 82000 }

Omdøb felter i indlejrede dokumenter

Du kan bruge samme metode til at omdøbe felter i indlejrede dokumenter. I dette tilfælde skal du bruge prik-notation til at henvise til det felt, du vil omdøbe.

Antag, at vi kører følgende forespørgsel mod et kæledyr samling:

db.pets.find().pretty()

Resultat:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20,
		"awards" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		}
	}
}
{
	"_id" : 2,
	"name" : "Fetch",
	"details" : {
		"born" : ISODate("2020-06-22T14:00:00Z"),
		"color" : "Black"
	}
}
{
	"_id" : 3,
	"name" : "Scratch",
	"details" : {
		"eats" : [
			"Mouse Porridge",
			"Bird Soup",
			"Caviar"
		],
		"type" : "Cat",
		"born" : ISODate("2020-12-19T14:00:00Z")
	}
}

Vi kan omdøbe felter på de indlejrede dokumenter som dette:

db.pets.aggregate([
  { "$project": 
    { 
      "_id": 0,
      "Pet": "$name",
      "Type": "$details.type",
      "Born": "$details.born"
    }
  }
])

Resultat:

{ "Pet" : "Wag", "Type" : "Dog" }
{ "Pet" : "Fetch", "Born" : ISODate("2020-06-22T14:00:00Z") }
{ "Pet" : "Scratch", "Type" : "Cat", "Born" : ISODate("2020-12-19T14:00:00Z") }

I dette tilfælde valgte jeg ikke alle felter i de indlejrede dokumenter, men du forstår.

Jeg brugte også "_id":0 for at udelade _id felt.

Bemærk også, at hvis et dokument faktisk ikke har et felt, der er angivet i $project fase, så vil det blot blive udeladt i det resulterende dokument. Du kan se dette i det første dokument, som udelader Born felt, og det andet dokument, som udelader Type felt.


  1. Hvordan udløber man HSET underordnet nøgle i redis?

  2. MongoDB på Android

  3. Hvad skal jeg bruge? Socket.io værelser eller Redis pub-sub?

  4. Problem med at deserialisere redis-cache til objekter i Spring-boot