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

MongoDB - Projekční dotazy

dotaz na projekci je dotaz, kde zadáváte, která pole mají být vrácena.

Když v MongoDB zadáte dotaz na kolekci pomocí db.collection.find() můžete určit, která pole chcete vrátit.

Můžete to udělat tak, že do dotazu zahrnete názvy polí a přidáte 1 nebo 0 vedle nich určit, zda má být vrácen nebo ne. Toto je projekce parametr. Parametr projekce 1 zobrazí pole a 0 skryje to.

Příklad

Nejprve proveďte dotaz bez projekce (takže můžeme vidět, kolik polí se vrátí):

Bez projekce

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

Výsledek:

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

S projekcí

Nyní pomocí projekce zobrazíme pouze name pole:

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

Výsledek:

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

Všimnete si, že _id pole je automaticky zahrnuto, i když jej nezadáte. Toto pole můžete vyloučit pomocí 0 proti:

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

Výsledek:

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

Míchání zahrnutí a vyloučení

1 nelze kombinovat s a 0 s (s výjimkou _id pole). Pokud se pokusíte smíchat zahrnutí a vyloučení, postupujte takto:

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

Skončíte s touto chybou:

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

Můžete tedy pole buď zahrnout, nebo je vyloučit – nikoli obojí.

Zde je příklad určení polí vyloučením:

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

Výsledek:

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

  1. vyloučit pole v agregaci $lookup

  2. MongoDB:Jak mohu aktualizovat jeden dílčí prvek v poli, na který odkazuje index v poli?

  3. Metoda MongoDB Date().

  4. Jak implementovat trigger pro redis datastore?