2014-08-31 33 views
102

Na moim MongoDB mam kolekcję studencką z 10 rekordami o polach name i roll. Jeden rekord z tej kolekcji jest:Jak wybrać pojedyncze pole w MongoDB?

{ 
    "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"), 
    "name" : "Swati", 
    "roll" : "80", 
} 

Chcę odzyskać pole „Roll” tylko dla wszystkich 10 rekordów w zbiorach jak zrobilibyśmy w tradycyjnej bazy danych za pomocą:

SELECT roll FROM student 

poszedłem przez wiele blogów, ale wszystkie powodują zapytanie, które musi zawierać klauzulę WHERE. Na przykład:

db.students.find({ "roll": { $gt: 70 }) 

Kwerenda jest równoznaczne z:

SELECT * FROM student WHERE roll > 70 

Moje wymogiem jest, aby znaleźć tylko jedno pole bez żadnego warunku. A więc, jaka jest operacja zapytania o to.

Z góry dziękuję.

+2

'db.students.find ({" roll ": {$ gt: 70})' nie jest równoważne 'WYBIERZ roll od studenta WHERE roll> 70' – therealrootuser

+1

Google jest twoim przyjacielem: http: // docs .mongodb.org/manual/tutorial/project-fields-from-query-results /. Również inna sekcja na temat: [Odwzorowywania SQL na MongoDB] (http://docs.mongodb.org/manual/reference/sql-comparison/), a także przydatna [Odwzorowanie SQL do agregacji] (http://docs.mongodb.org/manual/reference/sql-aggregation-comparison /). Poświęć trochę czasu na czytanie dokumentacji. To jest użyteczne. –

+0

@NeilLunn Dzięki za link [SQL do MongoDB Mapping] (http://docs.mongodb.org/manual/reference/sql-comparison/). Nie wiem, jak to przegapiłem. –

Odpowiedz

136

Z MongoDB docs:

Występ może jawnie zawierać kilka pól. W poniższej operacji metoda find() zwraca wszystkie dokumenty pasujące do zapytania. W zestawie wynikowym tylko pozycje i pola qty i domyślnie pole _id zwracane są w zgodnych dokumentach.

db.inventory.find ({type: 'żywność'}, {pozycja: 1, Ilość: 1})

W tym przykładzie od ludzi na Mongo, powracające dokumenty będą zawierać tylko pola item, qty i _id.


Zatem powinieneś być w stanie wydać oświadczenie, takie jak:

db.student.find({}, {roll:1, _id:0}) 

Powyższe stwierdzenie wybrania wszystkich dokumentów w kolekcji studentów i wrócił dokument powróci tylko pole roll (i wykluczyć _id).

Jeśli nie wymienimy _id:0, zwrócone pola będą następujące: roll i _id. Pole "_id" jest zawsze wyświetlane domyślnie. Musimy więc wyraźnie wymienić _id:0 wraz z roll.

+4

Nie może wydawać się Google to, więc warto strzał. Czy musisz wyraźnie wykluczać wszystkie pola, których nie chcesz? Powiedzmy, że chcesz tylko jedno pole, ale dokument ma 10, musisz wyraźnie ustawić "0" dla 9 z nich? Edycja: Nieważne, z wyjątkiem '_id' ie' '{field_I_want: 1, _id: 0}' wydaje się działać –

+0

Czy można dodać pole, a następnie zaktualizować dokument, jeśli używam rzutów? – chovy

42

myślę mattingly890 ma poprawną odpowiedź, oto kolejny przykład wraz ze wzoru/commmand

db.collection.find({}, {your_key:1, _id:0})

enter image description here

4

tylko dla celów edukacyjnych można też zrobić to z jedną z następujących czynności sposoby:

1.

var query = {"roll": {$gt: 70}; 
    var cursor = db.student.find(query); 
    cursor.project({"roll":1, "_id":0}); 

2.

var query = {"roll": {$gt: 70}; 
    var projection = {"roll":1, "_id":0}; 
    var cursor = db.student.find(query,projection); 

`

3

Spróbuj następujące zapytanie:

db.student.find({}, {roll: 1, _id: 0}).pretty(); 

Nadzieja to pomaga !!

0
db.student.find({}, {"roll":1, "_id":0}) 

Jest to równoważne -

Wybierz rolkę od studenta



db.student.find ({}, { "rolka": 1, "name" : 1, "_id": 0})

Jest to odpowiednik -

Wybierz roll, nazwa od studenta

2

coraz nazwisko studenta

student-details = db.students.find({{ "roll": {$gt: 70} },{"name": 1, "_id": False}) 

coraz Imię & rolkę studenta

student-details = db.students.find({{ "roll": {$gt: 70}},{"name": 1,"roll":1,"_id": False}) 
0

użyć zapytania jak to w powłoce:

1. użytkowania database_name

e.g: use database_name 

2. która zwraca tylko aktywa szczególności informacje polową kiedy dopasowane, _id:0 określa, aby nie wyświetlać identyfikator wynik:

0

W mongodb 3.4 możemy użyć poniżej logiki, nie jestem pewien o poprzednich wersjach:

wybierz rolkę ze studenta ==> db.student.find (!{}, {Rolki: 1})

wyżej logika pomaga zdefiniować kilka kolumn (jeśli są one mniej)

1

uzyskać wszystkie dane z jednego pola z _id

db.student.find({}, {roll:1}) 

SELECT rolki z studenta

uzyskać wszystkie dane z jednego pola bez _id

db.student.find({}, {roll:1, _id:0}) 

znaleźć określone dane za pomocą klauzuli WHERE

db.student.find({roll: 80}) 

SELECT * FROM studenci WHERE rolka = '80'

znalezienia danych za pomocą klauzuli WHERE i większą niż stan

db.student.find({ "roll": { $gt: 70 }) 

SELECT * FROM student WHERE roll> '70'