W moim MongoDB mam kolekcję studentów z 10 rekordami zawierającymi pola name
i roll
. Jeden rekord tej kolekcji to:
{
"_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
"name" : "Swati",
"roll" : "80",
}
Chcę pobrać pole roll
tylko dla wszystkich 10 rekordów w kolekcji, tak jak w tradycyjnej bazie danych za pomocą:
SELECT roll FROM student
Przeglądałem wiele blogów, ale wszystkie powodują zapytanie, które musi zawierać WHERE
klauzulę, na przykład:
db.students.find({ "roll": { $gt: 70 })
Zapytanie jest równoważne z:
SELECT * FROM student WHERE roll > 70
Moim wymaganiem jest znalezienie tylko jednego klucza bez żadnych warunków. Więc jaka jest w tym celu operacja zapytania.
mongodb
projection
Shipra Swati
źródło
źródło
Odpowiedzi:
Z dokumentów MongoDB :
W tym przykładzie od ludzi na Mongo, powracające dokumenty będą zawierać tylko te pola
item
,qty
, i_id
.Dlatego powinieneś być w stanie wydać oświadczenie, takie jak:
Powyższe oświadczenie spowoduje zaznaczenie wszystkich dokumentów w kolekcji studentów, a zwrócony dokument zwróci tylko
roll
pole (z wyłączeniem_id
).Jeśli nie wspomnimy,
_id:0
zwrócone pola toroll
i_id
. Pole „_id” jest zawsze wyświetlane domyślnie. Dlatego musimy wyraźnie wspomnieć_id:0
takżeroll
.źródło
0
dla 9 z nich? Edycja: Nevermind, z wyłączeniem_id
ie{field_I_want:1, _id:0}
wydaje się działaćWith the exception of the _id field, you cannot combine inclusion and exclusion statements in projection documents.
Może to być interesujące dla niektórych z was. ( źródło )pobierz wszystkie dane z tabeli
pobierz wszystkie dane z tabeli bez _id
pobierz wszystkie dane z jednego pola za pomocą _id
pobierz wszystkie dane z jednego pola bez _id
znajdź określone dane za pomocą klauzuli where
znajdź dane, używając klauzuli where i większej niż warunek
znajdź dane, używając klauzuli where i większej lub równej warunkowi
znajdź dane, używając klauzuli where i mniejszej lub równej warunkowi
znajdź dane, używając klauzuli where i mniej niż warunek
źródło
db.student.find({}, {_id:0})
Dzięki za pomoc.Myślę, że mattingly890 ma poprawną odpowiedź, oto kolejny przykład wraz ze wzorcem / poleceniem
db.collection.find( {}, {your_key:1, _id:0})
źródło
Proszę bardzo, 3 sposoby działania, najkrótsze do nudnego:
Aby usunąć określone pole, użyj
-
operatora:źródło
Tylko w celach edukacyjnych możesz to zrobić na jeden z poniższych sposobów:
1.
2)
`
źródło
Wypróbuj następujące zapytanie:
Mam nadzieję że to pomoże!!
źródło
W twoim przykładzie możesz zrobić coś takiego:
Występ
UWAGA
CZYTAJ WIĘCEJ
źródło
Chociaż odpowiedź gowtham jest kompletna, warto zauważyć, że te polecenia mogą różnić się w zależności od interfejsu API (w przypadku tych, którzy nie używają powłoki Mongo).
Proszę zapoznać się z linkiem do dokumentacji .
Nodejs przykład ma metodę o nazwie `projection, którą dołączasz do funkcji find w celu wyświetlania.
Zgodnie z tym samym zestawem przykładów w węźle można używać następujących poleceń:
db.student.find({}).project({roll:1})
Lub
db.student.find({}).project({roll:1, _id: 0})
i tak dalej.
Ponownie dla użytkowników nodejs, nie zapomnij (co powinieneś już znać, jeśli wcześniej używałeś tego API), aby użyć
toArray
w celu dołączenia.then
polecenia.źródło
Dla lepszego zrozumienia napisałem podobne zapytanie MySQL.
źródło
To działa dla mnie
brak warunku w klauzuli where, tj. wewnątrz pierwszych nawiasów klamrowych. wewnątrz kolejnych nawiasów klamrowych: lista nazw pól projekcji, które będą potrzebne w wyniku, a 1 oznacza, że dane pole jest częścią wyniku zapytania
źródło
źródło
Zapytanie dla MongoDB tutaj opłaty jest kolekcja, a opis jest polem.
źródło
Jeśli chcesz pobrać pole „roll” tylko dla wszystkich 10 rekordów w kolekcjach. Następnie spróbuj tego.
W MongoDb:
W Sql:
źródło
Chcę tylko dodać do odpowiedzi, że jeśli chcesz wyświetlić pole zagnieżdżone w innym obiekcie, możesz użyć następującej składni
db.collection.find( {}, {{'object.key': true}})
Tutaj klucz jest obecny w obiekcie o nazwie obiekt
źródło
Jest to równoważne z -
db.student.find ({}, {„roll”: 1, „name”: 1, „_id”: 0})
Jest to równoważne z -
źródło
Użyj tego zapytania w powłoce:
1. Użyj
database_name
2. Który zwraca dopasowane informacje o zasobach tylko o określonych polach,
_id:0
określa, aby nie wyświetlać identyfikatora w wynikuźródło
W mongodb 3.4 możemy użyć poniższej logiki, nie jestem pewien co do poprzednich wersji
wybierz rzut od studenta ==> db.student.find (! {}, {roll: 1})
powyższa logika pomaga zdefiniować niektóre kolumny (jeśli są mniejsze)
źródło
Używając Studio 3T dla MongoDB, jeśli
.find({}, { _id: 0, roll: true })
go użyję, nadal zwróci tablicę obiektów z pustym_id
właściwością.Korzystanie z JavaScript
map
pomogło mi pobrać tylko pożądanąroll
właściwość jako tablicę ciągów znaków:źródło
Nie jestem pewien, czy to odpowiada na pytanie, ale uważam, że warto tutaj wspomnieć. Jest jeszcze jeden sposób wyboru pojedynczego pola (a nie wielu) za pomocą
db.collection_name.distinct();
na przykład,
db.student.distinct('roll',{});
Lub drugi sposób: za pomocą
db.collection_name.find().forEach();
(można tu wybrać wiele pól poprzez konkatenację)na przykład,
db.collection_name.find().forEach(function(c1){print(c1.roll);});
źródło