2013-07-08 15 views
10
db.History.find({'_file.project': 'someproject') 
     .populate('_file', 'name reference project') 
     .sort(sortField || '-created') 
     .limit(max || 64) 
     .exec(this); 

Qui sto cercando di trovare tutti i documenti che corrispondono su un campo compilato dal riferimento di file. Non sembra funzionare. È possibile qualcosa del genere?Mangusta query un campo popolato

Potrei duplicare il campo del progetto su questo oggetto, come soluzione temporanea solo per l'interrogazione ma preferirei non ovviamente.

risposta

9

No, a find il parametro condizioni della query può solo fare riferimento alla raccolta richiesta.

populate non è un join, è solo una funzione di comodità per seguire la query principale con ulteriori query per inserire i dati associati da altre raccolte.

+0

Grazie. Quindi, solo per essere sicuro, per poter interrogare la raccolta Cronologia basata sul progetto dovrò aggiungere il campo del progetto, duplicandolo dal modello File? Recuperare tutti i documenti e quindi filtrare in seguito non è un'opzione, poiché la raccolta Cronologia è probabilmente molto grande. –

+1

@ 0x80 Destra, o ottieni tutti i documenti 'File' con il' progetto' corrispondente e poi usa una query '$ in' su' History' usando i valori '_id' della prima query. – JohnnyHK

+0

Lo capisco adesso. È bello sapere che ci sono due opzioni. Grazie! –

Problemi correlati