Il metodo find
restituisce un cursore. Funziona come un iteratore nel set di risultati. Se si hanno troppi risultati e si tenta di visualizzarli tutti sullo schermo, la shell visualizzerà solo i primi 20 e il cursore punterà ora sul 20 ° risultato del set di risultati. Se si digita it
, verranno visualizzati i 20 risultati successivi e così via.
Nel tuo esempio, penso che ci hai nascosto una riga nella shell.
Questo comando
> var collection = db.scores.find();
sarà solo assegnare il risultato alla collection
variabile e non stampa nulla sullo schermo. Quindi, questo mi fa credere che tu abbia anche eseguito:
> collection
Ora, quello che sta realmente accadendo. Se in effetti hai utilizzato il comando precedente per visualizzare il contenuto di collection
, il cursore avrà raggiunto la fine del set di risultati (poiché nella raccolta è presente un solo documento) e verrà chiuso automaticamente. Ecco perché si ottiene l'errore.
Non c'è niente di sbagliato nella sintassi. Puoi usarlo quando vuoi. Assicurati che il tuo cursore sia ancora aperto e abbia risultati. È possibile utilizzare il metodo collection.hasNext()
per quello.
try 'findOne()' – Tilo
find restituisce un cursore non un documento. Puoi aggiungere .toArray() a find() per trasformarlo in un array ma per un documento devi usare findOne come altri hanno detto. –
@Asya - Grazie per aver menzionato 'toArray()'.Questo è un modo per realizzare ciò che volevo fare nel mio codice di esempio, anche se non è la migliore pratica: - \. – dhulihan