2014-08-31 21 views
102

Nel mio MongoDB, ho una collezione di studenti con 10 record con campi name e roll. Un record di questa collezione è:Come selezionare un singolo campo in MongoDB?

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

voglio recuperare il campo "rotolo" solo per tutti i 10 record nelle collezioni come ci si poteva fare nel database tradizionale utilizzando:

SELECT roll FROM student 

sono andato attraverso molti blog, ma tutti si traducono in una query che deve contenere la clausola WHERE. Per esempio:

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

La query è equivalente a:

SELECT * FROM student WHERE roll > 70 

La mia esigenza è quella di trovare un campo solo senza alcuna condizione. Quindi, qual è l'operazione di query per quello.

Grazie in anticipo.

+2

'db.students.find ({" roll ": {$ gt: 70})' non è equivalente a 'SELECT roll FROM studente WHERE roll> 70' – therealrootuser

+1

Google è tuo amico: http: // docs .mongodb.org/manuale/tutorial/progetto-campi-di-query-risultati /. Un'altra sezione su: [SQL to MongoDB Mapping] (http://docs.mongodb.org/manual/reference/sql-comparison/) e anche utile [SQL to Aggregation Mapping] (http://docs.mongodb.org/manuale/riferimento/sql-aggregazione-comparatore /). Passa un po 'di tempo a leggere la documentazione. È utile. –

+0

@NeilLunn Grazie per il collegamento [da SQL a MongoDB Mapping] (http://docs.mongodb.org/manual/reference/sql-comparison/). Non so come mi sia perso questo. –

risposta

136

Dal MongoDB docs:

Una proiezione possono includere esplicitamente diversi campi. Nell'operazione seguente, il metodo find() restituisce tutti i documenti che corrispondono alla query. Nel set di risultati, solo i campi item e qty e, per impostazione predefinita, il campo _id restituisce nei documenti corrispondenti.

db.inventory.find ({type: 'food'}, {item: 1, qty: 1})

In questo esempio dai ragazzi di Mongo, i documenti restituiti conterranno solo il campi di item, qty e _id.


Pertanto, si dovrebbe essere in grado di rilasciare una dichiarazione come:

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

La dichiarazione di cui sopra selezionerà tutti i documenti della collezione studenti, e il documento restituito tornerà solo il campo roll (ed escludi lo _id).

Se non si menziona _id:0 i campi restituiti saranno roll e _id. Il campo '_id' viene sempre visualizzato per impostazione predefinita. Quindi abbiamo bisogno di menzionare esplicitamente _id:0 insieme a roll.

+4

Non riesco a visualizzare Google, quindi vale la pena provare. Devi escludere esplicitamente tutti i campi che non vuoi? Diciamo che vuoi solo un campo ma che il documento ha 10 devi impostare esplicitamente '0' per 9 di loro? Edit: Nevermind, escludendo '_id' i.e.' {field_I_want: 1, _id: 0} 'sembra funzionare –

+0

È possibile aggiungere un campo e quindi aggiornare il documento se utilizzo le proiezioni? – chovy

42

penso mattingly890 ha la risposta corretta, qui è un altro esempio con il modello/commmand

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

enter image description here

4

solo per scopi didattici si potrebbe anche fare con una qualsiasi delle seguenti modi:

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

provare la seguente query:

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

Spero che questo aiuti !!

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

Ciò equivale a -

Selezionare rotolo dal studente



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

Questo è equivalente a -

Select rotolo, nome da studente

2

ottenere nome dello studente

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

ottenere nome & rotolo dello studente

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

utilizzare la query come questo nella shell:

1. Usa database_name

e.g: use database_name 

2. che restituisce solo beni particolari informazioni campo quando abbinato, _id:0 specifica di non visualizzare in ID il risultato

db.collection_name.find({ "Search_Field": "value" }, 
        { "Field_to_display": 1,_id:0 } ) 
0

In mongodb 3.4 possiamo usare sotto la logica, non sono sicuro un versioni precedenti

selezionare il rotolo dallo studente ==> db.student.find (!{}, {Roll: 1})

la logica sopra aiuta a definire alcune colonne (se sono meno)

1

ottenere tutti i dati da un campo con _id

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

SELEZIONA rotolo dA studente

ottenere tutti i dati da un campo senza _id

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

trovare i dati specificati utilizzando clausola where

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

SELECT * FROM studenti WHERE rotolo = '80'

trovano un dati utilizzando dove clausola e superiore condizione

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

SELEZIONA * DA studente DOVE rotola> '70'

Problemi correlati