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

MongoDB - Query di proiezione

Una query di proiezione è una query in cui specifichi quali campi devono essere restituiti.

In MongoDB, quando esegui query su una raccolta utilizzando db.collection.find() metodo, puoi specificare quali campi desideri vengano restituiti.

Puoi farlo includendo i nomi dei campi nella tua query e aggiungendo un 1 o 0 accanto ad essi, per specificare se deve essere restituito o meno. Questa è una proiezione parametro. Un parametro di proiezione di 1 visualizzerà il campo e un 0 lo nasconderà.

Esempio

Per prima cosa facciamo una query senza proiezione (così possiamo vedere quanti campi vengono restituiti):

Senza proiezione

db.musicians.find( { instrument: "Vocals"} )

Risultato:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }

Con proiezione

Ora, utilizziamo la proiezione per visualizzare solo il nome campo:

db.musicians.find( { instrument: "Vocals" }, { name: 1 } )

Risultato:

{ "_id" : 1, "name" : "Ian Gillan" }
{ "_id" : 6, "name" : "Jeff Martin" }

Noterai che il _id campo viene incluso automaticamente, anche se non lo specifichi. Puoi escludere questo campo utilizzando un 0 contro di essa:

db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } )

Risultato:

{ "name" : "Ian Gillan" }
{ "name" : "Jeff Martin" }

Miscelazione di inclusioni ed esclusioni

Non puoi mischiare 1 se 0 s (ad eccezione di _id campo). Se provi a mescolare inclusioni ed esclusioni, in questo modo:

db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } )

Ti ritroverai con questo errore:

Error: error: {
	"waitedMS" : NumberLong(0),
	"ok" : 0,
	"errmsg" : "Projection cannot have a mix of inclusion and exclusion.",
	"code" : 2
}

Quindi per te includere i campi o escluderli, non entrambi.

Ecco un esempio di specifica dei campi per esclusione:

db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } )

Risultato:

{ "name" : "Ian Gillan" }
{ "name" : "Jeff Martin", "born" : 1969 }