2013-02-26 16 views
9

Ho un codice come mostrato di seguito. Ci sono circa 60.000 voci nella mia raccolta di parole chiave in Mongo. Voglio solo i primi 25, quindi sto cercando di trovare un limite. Sto eseguendo la stessa query per stampare il mio numero di risultati. Per qualche ragione, la limitazione non sembra funzionare perché il mio messaggio di registro dice 60K circa.Numero limite di risultati in Meteor sul lato server?

Questo tipo di cose non è possibile? Posso impostare un limite sul lato client che funzioni, ma ho pensato di provare a limitare le cose sul server in modo da ottenere meno dati.

pochi bit di informazioni aggiuntive:

  • Sto usando il mio proprio database Mongo, non quello fornito da meteoriti; indicando con la variabile env
  • versione 0.5.7

Qualsiasi aiuto sarebbe molto apprezzato.

if (Meteor.isServer) { 
    Meteor.startup(function() { 
    console.log('server startup'); 

    Meteor.publish("keyword_hits", function() { 
     console.log('keywords: ' + Keywords.find({}, {sort: {count:-1}, limit:25}).count()); 
     return Keywords.find({}, {sort: {count:-1}, limit:25}); 
    }); 
}); 
+4

Ah penso di averlo trovato, stavo usando il campo _id me stesso. Ho cambiato il mio codice per utilizzare l'impostazione predefinita e tutto sembra funzionare ora. Mi ricorderò di lasciare _id da solo quando si usa la meteora. –

+6

Ciao Eric, ti dispiacerebbe incollare la soluzione come risposta e chiudere la domanda? O hai ancora bisogno di aiuto con esso? – cmather

+0

Una cosa che noto è che stai ordinando nella tua istruzione console.log. Nessun motivo per ordinare se stai facendo un conteggio. –

risposta

16

Con l'API di Mongo che viene fornito con Meteor, .count() non prende in considerazione Limits, o Skips quindi quello che stai vedendo sta per essere sempre l'importo massimo di cose nella vostra collezione.

Se fai

Meteor.publish("keyword_hits", function() { 
     console.log('keywords: ' + Keywords.find({}, {sort: {count:-1}, limit:25}).fetch().length); 
     return Keywords.find({}, {sort: {count:-1}, limit:25}); 
}); 

Così, invece di chiamare .count() e invece si chiama, .fetch() che restituisce i prescelti 25 voci dalla tua collezione, quindi chiamare .length su di esso, si vedrà il numero corretto di voci erano restituito.

In realtà ho aperto un problema su .count() perché nel normale Mongo puoi fare: .count({'applySkipLimit': true}); che prenderà in considerazione, i tuoi salti e i tuoi limiti.

Comunque, questo è il tuo problema.

Problemi correlati