MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB znajdź()

W MongoDB db.collection.find() metoda wybiera dokumenty w kolekcji lub widoku i zwraca kursor do wybranych dokumentów.

collection część to nazwa kolekcji lub widoku do przeszukania.

Możesz go użyć do zwrotu wszystkich dokumentów, tylko niektórych lub tylko jednego dokumentu. Możesz również określić, które pola mają zostać zwrócone.

Należy pamiętać, że tak naprawdę nie zwraca dokumentów. Zwraca jedynie kursor do dokumentów. Powiedziawszy to, łatwiej jest powiedzieć, że „zwraca dokumenty” i zazwyczaj jest to określane w taki sposób – także w tym artykule 🙂

Zwróć wszystkie dokumenty

Oto przykład do zademonstrowania.

db.pets.find()

Wynik:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }

Tutaj używamy find() metoda zwracania wszystkich dokumentów od pets kolekcja. Wiemy, że zwraca to wszystkie dokumenty, ponieważ nie podaliśmy żadnych kryteriów filtrowania. W rzeczywistości nie przedstawiliśmy żadnych argumentów.

Po wywołaniu bez argumentów, find() zwraca wszystkie dokumenty z kolekcji i zwraca wszystkie pola dla dokumentów.

Inny sposób na wykonanie powyższego jest taki:

db.pets.find({})

W tym przypadku przekazujemy pusty dokument.

Dodając do tego pustego dokumentu, możemy zacząć filtrować wyniki.

Filtruj wyniki

Rzeczywista składnia find() idzie tak:

db.collection.find(query, projection)

Oznacza to, że możesz przekazać zapytanie jako pierwszy argument, a projekcję jako drugi.

Jeśli przekażesz zapytanie, zostanie ono użyte do filtrowania wyników. Zapytanie to dokument zawierający operatory zapytań. Jak widzieliśmy w poprzednim przykładzie, pusty dokument zwraca wszystkie dokumenty.

Zawęźmy wyniki do podzbioru dokumentów w kolekcji.

db.pets.find({"type":"Dog"})

Wynik:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }

To zawęziło wyniki tylko do tych dokumentów, które mają type pole o wartości Dog .

W tym przypadku po prostu przekazaliśmy dokument jako kryteria filtrowania.

Możesz także użyć operatorów zapytań. Pozwalają one na zastosowanie bardziej szczegółowych kryteriów do zapytania.

Przykład:

db.pets.find({"weight": { $lt: 10 }})

Wynik:

{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }

Osadzone dokumenty

Jeśli masz dokumenty zawierające osadzone dokumenty, możesz użyć następujących metod do zapytania o dane w osadzonych dokumentach.

  • Zapis kropkowy (np. field.nestedfield: <value> )
  • Forma zagnieżdżona (np. { field: { nestedfield: <value> } } ). Pamiętaj, że ta opcja jest dostępna tylko w MongoDB 4.4.

Załóżmy, że wstawiamy następujący dokument.

db.pets.insertOne({
    "_id" : 6,
    "name" : "Fetch",
    "type" : "Dog",
    "specs" : {
        "height" : 400,
        "weight" : 15,
        "color" : "brown"
    }
})

Możemy użyć notacji kropkowej do zapytania w osadzonym dokumencie.

db.pets.find({ "specs.height": 400 })

Wynik:

{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }

Poniższe zapytanie zwraca ten sam dokument, z tym wyjątkiem, że tym razem odwołujemy się do osadzonego dokumentu za pomocą formularza zagnieżdżonego.

db.pets.find({ 
    "specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown"
	}
 })

Wynik:

{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }

W przypadku korzystania z formularza zagnieżdżonego zapytanie musi dokładnie pasować do całego osadzonego dokumentu. Na przykład następujące zapytanie nie pasuje:

db.pets.find({ 
    "specs" : {
		"height" : 400
	}
 })

Sformatuj wyniki

Wynik poprzedniego przykładu został zwrócony w jednym wierszu. Możesz użyć cursor.pretty() metoda konfiguracji kursora w celu wyświetlenia wyników w bardziej czytelnym formacie.

Aby użyć pretty() metody, dołącz go do find() metoda.

Przykład:

db.pets.find({ "_id": 6 }).pretty()

Wynik:

{
	"_id" : 6,
	"name" : "Fetch",
	"type" : "Dog",
	"specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown"
	}
}

Tablice

Możesz odwoływać się do danych w tablicach, odwołując się do elementu tablicy przez jego indeks lub jego wartość.

Załóżmy, że wstawiamy następujący dokument:

db.pets.insertOne({
    "_id" : 7,
    "name" : "Jake",
    "type" : "Dog",
    "awards" : [
        "Top Dog",
        "Best Dog",
        "Biggest Dog"
    ]
})

Gdybyśmy chcieli znaleźć wszystkie psy z nagrodą Top Dog, moglibyśmy napisać następujące zapytanie (które zwróci powyższego psa).

db.pets.find({ 
    "awards": "Top Dog"
}).pretty()

Wynik:

{
	"_id" : 7,
	"name" : "Jake",
	"type" : "Dog",
	"awards" : [
		"Top Dog",
		"Best Dog",
		"Biggest Dog"
	]
}

Możesz również określić indeks elementu w następujący sposób:

db.pets.find({ 
    "awards.0": "Top Dog"
}).pretty()

Wymaga to, aby określona wartość znajdowała się pod określonym indeksem. Dlatego następujące zapytanie nie zwraca tego samego psa.

db.pets.find({ 
    "awards.1": "Top Dog"
}).pretty()

Zauważ, że tablice są liczone od zera, więc indeks 0 określa pierwszy element, 1 określa drugi element i tak dalej.

Projekcje

Domyślnie wszystkie pola dokumentu są zwracane, gdy używasz find() . Ale w razie potrzeby możesz użyć prognoz, aby zmniejszyć liczbę zwracanych pól.

Być może pamiętasz, że składnia find() idzie tak:

db.collection.find(query, projection)

Gdzie query udostępnia kryteria filtrowania (co zrobiliśmy w powyższych przykładach) oraz projection to opcjonalna projekcja, która określa, które pola mają zostać zwrócone z dowolnych pasujących dokumentów. Dlatego jeśli chcemy użyć projekcji, po prostu umieszczamy ją po zapytaniu.

Korzystając z projekcji, możesz określić pola do uwzględnienia , pola do wykluczenia , lub oba. Aby to zrobić, podaj nazwę pola i albo 1 (aby to uwzględnić) lub 0 (aby to wykluczyć).

Obecnie nasza kolekcja zawiera następujące dokumenty:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }

Oto przykład użycia rzutowania do określenia pól do uwzględnienia:

db.pets.find({}, { name: 1, type: 1 })

Wynik:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat" }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat" }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog" }
{ "_id" : 7, "name" : "Jake", "type" : "Dog" }

Zauważ, że _id pole jest zwracane, mimo że nie uwzględniliśmy go w naszej projekcji. To pole jest wyjątkiem i jest uwzględniane domyślnie.

Jeśli nie chcesz _id pole, które ma zostać zwrócone, musisz je wyraźnie wykluczyć.

db.pets.find({}, { _id: 0, name: 1, type: 1 })

Wynik:

{ "name" : "Wag", "type" : "Dog" }
{ "name" : "Bark", "type" : "Dog" }
{ "name" : "Meow", "type" : "Cat" }
{ "name" : "Scratch", "type" : "Cat" }
{ "name" : "Bruce", "type" : "Bat" }
{ "name" : "Fetch", "type" : "Dog" }
{ "name" : "Jake", "type" : "Dog" }

Oto kolejny przykład, tym razem określamy tylko, które pola należy wykluczyć.

db.pets.find({}, { _id: 0, weight: 0, specs: 0, awards: 0 })

Wynik:

{ "name" : "Wag", "type" : "Dog" }
{ "name" : "Bark", "type" : "Dog" }
{ "name" : "Meow", "type" : "Cat" }
{ "name" : "Scratch", "type" : "Cat" }
{ "name" : "Bruce", "type" : "Bat" }
{ "name" : "Fetch", "type" : "Dog" }
{ "name" : "Jake", "type" : "Dog" }

Więcej projekcji

Jest wiele innych rzeczy, które możesz zrobić z projekcjami. Na przykład, począwszy od MongDB 4.4, możesz użyć wyrażeń agregujących, aby określić wartość przewidywanego pola.

Przykład:

db.pets.find({}, { 
    "_id": 0,
    "n": "$name", 
    "t": "$type", 
    "w": "$weight" 
    })

Wynik:

{ "n" : "Wag", "t" : "Dog", "w" : 20 }
{ "n" : "Bark", "t" : "Dog", "w" : 10 }
{ "n" : "Meow", "t" : "Cat", "w" : 7 }
{ "n" : "Scratch", "t" : "Cat", "w" : 8 }
{ "n" : "Bruce", "t" : "Bat", "w" : 3 }
{ "n" : "Fetch", "t" : "Dog" }
{ "n" : "Jake", "t" : "Dog" }

Tutaj zmieniliśmy nazwy pól. Zrobiliśmy to, określając nową nazwę dla każdego pola jako literał ciągu, używając $fieldName składnia do wyświetlenia tej wartości pól. Rezultat przypomina trochę użycie aliasów w SQL.

Więcej informacji

Więcej informacji znajdziesz w dokumentacji MongoDB.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose Query do filtrowania tablicy i wypełniania powiązanej treści

  2. Jak analizować użycie dysku przez kontener Docker

  3. Jak określić kolejność właściwości w obiekcie javascript dla indeksu MongoDB w node.js?

  4. Jak mogę wyłączyć komunikaty dziennika MongoDB w konsoli?

  5. Jak usunąć wiele kolekcji mongodb naraz?