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

MongoDB - Interroga una raccolta

MongoDB fornisce il db.collection.find() metodo per interrogare i documenti all'interno di una raccolta.

Il db.collection.find() seleziona i documenti in una raccolta e riporta un cursore sui documenti selezionati.

Restituisci tutti i documenti

Questo esempio restituisce tutti i documenti di musicisti collezione:

db.musicians.find()

Risultato:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }

Restituisce tutti i documenti perché non abbiamo passato alcun parametro come criterio di filtro.

La query precedente è una versione ridotta di db.musicians.find( {} ) . Nella query precedente, abbiamo omesso le parentesi graffe {} . Questo è perfettamente valido quando si lavora con MongoDB.

Aggiungi criteri di filtraggio

Puoi filtrare i risultati fornendo solo i criteri che ti interessano.

Ad esempio, se siamo interessati solo ai Deep Purple degli artisti collezione:

db.artists.find({ artistname : "Deep Purple" })

Risultato:

{ "_id" : ObjectId("5781f85d48ef8c6b3ffb0150"), "artistname" : "Deep Purple", "albums" : [ { "album" : "Machine Head", "year" : 1972, "genre" : "Rock" }, { "album" : "Stormbringer", "year" : 1974, "genre" : "Rock" } ] }

Formatta i risultati

Potresti trovare i risultati di cui sopra un po' difficili da leggere. Il documento viene restituito come una lunga riga di testo.

Puoi usare pretty() metodo per formattare i risultati in modo che siano un po' più facili da leggere.

Basta aggiungere pretty() fino alla fine, così:

db.artists.find({ artistname : "Deep Purple" }).pretty()

Risultato:

{
	"_id" : ObjectId("5781f85d48ef8c6b3ffb0150"),
	"artistname" : "Deep Purple",
	"albums" : [
		{
			"album" : "Machine Head",
			"year" : 1972,
			"genre" : "Rock"
		},
		{
			"album" : "Stormbringer",
			"year" : 1974,
			"genre" : "Rock"
		}
	]
}

Più opzioni di filtro

Ecco altri modi per filtrare i risultati.

Specifica AND Condizioni

È possibile specificare che devono essere restituiti solo i documenti contenenti due o più valori specificati.

In questo esempio, specifichiamo che solo i musicisti che suonano la batteria e dove nati prima del 1950 devono essere restituiti. Verranno restituiti solo i documenti che soddisfano entrambi i criteri.

db.musicians.find( { instrument: "Drums", born: { $lt: 1950 } } )

Risultato:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }

Specifica OR Condizioni

È inoltre possibile specificare che l'uno o l'altro valore debba essere true. Finché una delle condizioni è soddisfatta, il documento verrà restituito.

In questo esempio, vogliamo documenti che contengano musicisti che suonano la batteria o che sono nati prima del 1950.

db.musicians.find(
   {
     $or: [ { instrument: "Drums" }, { born: { $lt: 1950 } } ]
   }
)

Risultato:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }

Il $in Operatore

Il $in operatore consente di fornire un elenco di valori. Se un documento contiene uno di questi valori, verrà restituito.

Utilizzando il seguente esempio, stiamo cercando tutti i musicisti che sono alla voce o suonano la chitarra.

db.musicians.find( { instrument: { $in: [ "Vocals", "Guitar" ] } } )

Risultato

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }

Interroga una matrice di documenti

Questo esempio interroga una matrice di documenti. Trova gli album pubblicati dopo il 2000.

db.artists.find(
   {
      albums: {
                $elemMatch: {
                     year: { $gt: 2000 }
                }
      }
   }
).pretty()

Risultato:

{
	"_id" : ObjectId("578217c248ef8c6b3ffb015a"),
	"artistname" : "Robben Ford",
	"albums" : [
		{
			"album" : "Bringing it Back Home",
			"year" : 2013,
			"genre" : "Blues"
		},
		{
			"album" : "Talk to Your Daughter",
			"year" : 1988,
			"genre" : "Blues"
		}
	]
}
{
	"_id" : ObjectId("578217c248ef8c6b3ffb015b"),
	"artistname" : "Snoop Dogg",
	"albums" : [
		{
			"album" : "Tha Doggfather",
			"year" : 1996,
			"genre" : "Rap"
		},
		{
			"album" : "Reincarnated",
			"year" : 2013,
			"genre" : "Reggae"
		}
	]
}

Noterai che questi risultati contengono anche album precedenti al 2000. Questo è corretto:è il modo in cui funzionano i database orientati ai documenti. Qualsiasi query restituirà l'intero documento (ma solo i documenti che soddisfano i criteri specificati).

Il db.collection.findOne() Metodo

Puoi usare db.collection.findOne() metodo per restituire un documento che soddisfa i criteri di query specificati.

Se più documenti soddisfano i criteri, viene restituito solo il primo, come determinato dall'ordine naturale dei documenti su disco.

Quindi cercare un'intera collezione come questa:

db.musicians.findOne( )

Restituirà un solo documento:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }

Se cambiamo il findOne() per find() così:

db.musicians.find( )

Vediamo che in realtà ci sono 8 documenti nella collezione:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }