Die Methode find
gibt einen Cursor zurück. Dies funktioniert wie ein Iterator in der Ergebnismenge. Wenn Sie zu viele Ergebnisse haben und versuchen, sie alle auf dem Bildschirm anzuzeigen, zeigt die Shell nur die ersten 20 an und der Cursor zeigt nun auf das 20. Ergebnis der Ergebnismenge. Wenn Sie it
eingeben, werden die nächsten 20 Ergebnisse angezeigt und so weiter.
In Ihrem Beispiel denke ich, dass Sie von uns eine Zeile in der Shell versteckt haben.
Dieser Befehl
> var collection = db.scores.find();
wird nur das Ergebnis an die collection
Variablen zuweisen und wird nichts auf dem Bildschirm drucken. Also, das lässt mich glauben, dass du auch gelaufen bist:
> collection
Nun, was passiert wirklich. Wenn Sie tatsächlich den obigen Befehl verwendet haben, um den Inhalt der collection
anzuzeigen, dann hat der Cursor das Ende der Ergebnismenge erreicht (da Sie nur ein Dokument in Ihrer Sammlung haben) und es wird automatisch geschlossen. Deshalb bekommst du den Fehler zurück.
Es ist nichts falsch mit Ihrer Syntax. Sie können es jederzeit verwenden. Stellen Sie nur sicher, dass der Cursor noch geöffnet ist und Ergebnisse enthält. Sie können hierfür die Methode collection.hasNext()
verwenden.
try 'findOne()' – Tilo
find gibt einen Cursor zurück, kein Dokument. Sie können .toArray() zu find() hinzufügen, um es in ein Array umzuwandeln, aber für ein Dokument sollten Sie findOne verwenden, wie andere gesagt haben. –
@Asya - Danke für die Erwähnung 'toArray()'.Das ist eine Möglichkeit, um das zu erreichen, was ich in meinem Beispielcode tun wollte, auch wenn es nicht die beste Vorgehensweise ist: - \. – dhulihan