Meteor – collection.find () restituisce sempre tutti i campi

Rannicchiato 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.

Comandi come

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

Restituisci sempre ogni campo, invece di triggersre l’esclusione / inclusione 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.

la tua syntax è un po ‘off, dovrebbe essere

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

o

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

il tuo modello controlla effettivamente quali dati vengono visualizzati, ma ci sono ancora molti scenari in cui la limitazione del campo ha 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 – vedi http://docs.meteor.com/#meteor_publish – il modificatore dei fields è disponibile anche sul client, ma non limita i dati inviati al client, solo per il modello – la riduzione / selezione del campo lato server ha diversi vantaggi

controlla di aver rimosso anche il pacchetto di autopublish , tuttavia dovresti vedere un avviso se lo hai attivo e scrivi le tue funzioni di pubblicazione, che è il posto in cui useresti più comunemente i fields

Innanzitutto, 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 prova questo:

Sul server:

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

Sul client:

 Meteor.subscribe("myCollection"); 

quindi eseguire meteor remove autopublish .

Secondo, se vuoi ottenere Array of Collection.find (), prova a farlo: Collection.find (). Fetch ();