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

MongoDB - Dotaz na kolekci

MongoDB poskytuje db.collection.find() metoda dotazování dokumentů v rámci kolekce.

db.collection.find() vybere dokumenty v kolekci a vrátí kurzor na vybrané dokumenty.

Vrátit všechny dokumenty

Tento příklad vrátí všechny dokumenty od hudebníků kolekce:

db.musicians.find()

Výsledek:

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

Vrací všechny dokumenty, protože jsme jako kritéria filtrování nepředali žádné parametry.

Výše uvedený dotaz je zkrácenou verzí db.musicians.find( {} ) . Ve výše uvedeném dotazu jsme vynechali složené závorky {} . To dokonale platí při práci s MongoDB.

Přidat kritéria filtrování

Výsledky můžete filtrovat tak, že zadáte pouze kritéria, která vás zajímají.

Pokud nás například zajímá pouze Deep Purple od umělců kolekce:

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

Výsledek:

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

Formátování výsledků

Výše uvedené výsledky se vám mohou zdát trochu obtížně čitelné. Dokument je vrácen jako jeden dlouhý řádek textu.

Můžete použít pretty() způsob formátování výsledků tak, aby byly o něco snadněji čitelné.

Stačí připojit pretty() do konce, takhle:

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

Výsledek:

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

Další možnosti filtrování

Zde je několik dalších způsobů filtrování výsledků.

Uveďte AND Podmínky

Můžete určit, že mají být vráceny pouze dokumenty obsahující dvě nebo více zadaných hodnot.

V tomto příkladu specifikujeme, že pouze hudebníci, kteří hrají na bicí a kam by se měli vrátit narození před rokem 1950. Budou vráceny pouze dokumenty, které splňují obě kritéria.

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

Výsledek:

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

Uveďte OR Podmínky

Můžete také určit, že jedna nebo druhá hodnota by měla být pravdivá. Pokud je splněna jedna z podmínek, dokument bude vrácen.

V tomto příkladu chceme dokumenty, které obsahují hudebníky, kteří buď hrají na bicí, nebo se narodili před rokem 1950.

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

Výsledek:

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

$in Operátor

$in operátor umožňuje poskytnout seznam hodnot. Pokud dokument obsahuje některou z těchto hodnot, bude vrácen.

Pomocí následujícího příkladu hledáme všechny hudebníky, kteří buď zpívají, nebo hrají na kytaru.

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

Výsledek

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

Dotaz na pole dokumentů

Tento příklad se dotazuje na pole dokumentů. Najde alba, která byla vydána po roce 2000.

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

Výsledek:

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

Všimnete si, že tyto výsledky obsahují také alba z doby před rokem 2000. To je správné – takto fungují databáze orientované na dokumenty. Jakýkoli dotaz vrátí celý dokument (ale pouze ty dokumenty, které splňují zadaná kritéria).

db.collection.findOne() Metoda

Můžete použít db.collection.findOne() metoda pro vrácení jednoho dokumentu, který splňuje zadaná kritéria dotazu.

Pokud kritéria splňuje více dokumentů, vrátí se pouze první z nich, jak je určeno přirozeným pořadím dokumentů na disku.

Takže hledat celou sbírku takto:

db.musicians.findOne( )

Vrátí pouze jeden dokument:

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

Pokud změníme findOne() na find() takhle:

db.musicians.find()

Vidíme, že ve sbírce je ve skutečnosti 8 dokumentů:

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

  1. Mongoose &jedinečné pole

  2. Zjistěte, zda hodnota obsahuje alespoň jednu číselnou číslici v SQL

  3. Použití memcached nebo Redis na aws-elasticache

  4. Java převádí bajty na binární bezpečný řetězec