2013-04-12 14 views
50

Ran in questo (problema leggermente fastidioso) Sto cercando di cercare tutti i record in una raccolta e non mostrare (o mostrare) un campo specifico (punteggio). Questo è solo un esempio e non riflette il mio codice attuale, ma il problema è sempre riproducibile. I campi che sto escludendo sono molto grandi e sto solo cercando di generare un menu di record disponibili.Meteor - collection.find() restituisce sempre tutti i campi

Comandi come

players.find({},{score:1}) 
    players.find({},{score:0}) 

ritornano sempre ogni campo, invece di innescare l'escludere/include in MongoDB. Sono preoccupato di nulla, dal momento che il modello potenzialmente può controllare quali dati vengono resi in html? Si sente ancora come i dati vengono trasferiti al lato client indipendentemente; e si presenta nella console.

+2

La sintassi è errata perché si presuppone che la sintassi di Mongo sia applicabile direttamente a Meteor. – Saad

risposta

93

la sintassi è spento un po ', dovrebbe essere

CollectionName.find({}, {fields: {'onlyThisField':1}}); 

o

CollectionName.find({}, {fields: {'everythingButThisField':0}}); 

il modello non effettivamente controllare ciò che viene visualizzato i dati, ma ci sono ancora molti scenari in cui il campo di limitazione ha un senso - privacy dei dati o efficienza (alcuni campi di tutti i record, tutti i campi del record "corrente") sono due comuni

non lo hai menzionato, ma questo di solito è all'interno di una funzione di pubblicazione - vedere http://docs.meteor.com/#meteor_publish - il modificatore fields è anche disponibile sul client, ma non limita i dati inviati al client, solo al modello - la riduzione/selezione del campo lato server ha diversi vantaggi

-

doppio controllo che hai rimosso il pacchetto autopublish troppo, ma si dovrebbe vedere un messaggio di avviso se si dispone di attivi e scrivere il proprio pubblicare funzioni, che è dove si sarebbe più comunemente utilizzare fields

+1

Che non ha funzionato .. Ti manca il mio punto, non importa come strutturo la query mongo, per includere un campo, o escludere ogni campo; restituisce sempre gli stessi risultati, ogni campo. – redcap3000

+1

Stai usando questo sul codice lato client? Funziona solo sul server.Se potessi inserire il codice, sarebbe di aiuto un po 'di più perché è molto difficile riprodurlo se hai affrontato tutto come in questa risposta. – Akshat

+0

Non c'è nulla di simile sul lato client? –

10

In primo luogo, se vuoi controllare alcuni campi in Collection.find(), puoi provare a farlo in questo modo:

CollectionName.find({}, {fields: {field:1}}); 

ma funzionava solo sul server.

Oppure provate questo:

Sul server:

Meteor.publish("myCollection", function() { 
    return SvseTree.find({},{fields: {field:1}}); 
}); 

Sul client:

Meteor.subscribe("myCollection"); 

quindi eseguire meteor remove autopublish.

In secondo luogo, se si desidera ottenere Array of Collection.find(), provare a farlo: Collection.find(). Fetch();

+0

Quindi, al momento non esiste un modo per limitare i campi sul lato client? – Hamal000

+0

@ Hamal000 http://docs.meteor.com/#find –