find gibt einen Cursor zurück. Ein Cursor kann nur einmal aufgelistet werden. Sobald Sie einen Cursor aufgezählt haben, hat er das Ende erreicht und liefert keine weiteren Dokumente mehr. Im folgenden Beispiel wird der Variablen a ein Cursor-Wert zugewiesen, und wenn wir zum ersten Mal "a" in der Shell auswerten, werden die Ergebnisse der Aufzählung des Cursors wiedergegeben. Das zweite Mal, dass wir evalute „a“ es aufzählt die Cursor wieder, aber dieses Mal, wenn der Cursor ist leer, so werden keine Dokumente hallen:
> var a = db.test.find().limit(1)
> a
{ "_id" : ObjectId("52dfccba5fd17fe6a4d0051a"), "a" : 16807, "b" : 475249 }
> a
>
Das obige Beispiel gibt einen Cursor, obwohl Sie Limit (1) verwendet. Es ist nicht so, dass "a" seinen Wert verliert, es bezieht sich immer noch auf den gleichen Cursor, es ist nur so, dass der Cursor, auf den es sich bezieht, sein Ende erreicht hat.
Wenn Sie ein einzelnes Dokument zu lesen und den Rückgabewert haben, ein Dokument anstelle eines Cursors Verwendung FindOne:
> var a = db.test.findOne()
> a
{ "_id" : ObjectId("52dfccba5fd17fe6a4d0051a"), "a" : 16807, "b" : 475249 }
> a
{ "_id" : ObjectId("52dfccba5fd17fe6a4d0051a"), "a" : 16807, "b" : 475249 }
>
Dies ist eine einfachere Antwort als die von bpruitt-goddard. Wenn Sie nur nach einem einzelnen Dokument suchen, funktioniert das so, wie Sie es erwarten würden. – JackAce
Danke für die Erklärung, ich habe mich gefragt, warum meine Variable nur den Wert beim ersten Mal gehalten hat, aber die Cursor-Erklärung macht absolut Sinn. –