2017-01-23 3 views
0

ich die folgenden Abfrage als med.js gespeichert habenMongoDB Abfrage Failing

var cust = db.Collection.find({"email":null}); 
var count = 0; 
print("total entries: ",cust.length()," ",cust.hasNext()); 
while(cust.hasNext()){ 
nextCust = cust.next(); 
db.Collection.update({_id:nextCust._id},{$set : {"email":""}}); 
count++; 
} 
print("total updated: ",count); 

Wenn ich diese Abfrage bin Ausführung als
Mongo dbName 13017 --port ~/Dokumente/med.js

Ausgang ist Einträge gesamt: 491.502 falsche
insgesamt aktualisiert: 0

Wie kommen Gesamteinträge als 491502 angezeigt, aber HasNext() ist falsch. Es geht nicht in der While-Schleife

+0

find() gibt einen Cursor zurück, und der Cursor hat keine Methodenlänge https://docs.mongodb.com/manual/reference/method/js-cursor/. Sind Sie sicher, dass der Name der Sammlung richtig ist? –

+0

Ich schreibe Sammlung nur als Referenz, aber der tatsächliche Name der Sammlung ist anders. – sid297

Antwort

3

Die cursor.length() Funktion erschöpft den Cursor durch die Umwandlung in ein Array. Überprüfen Sie den Funktionscode.

>cur.length 
function(){ 
    return this.toArray().length; 
} 

Sie erhalten also false.

die Zählung zu erhalten, ohne die Cursor anstrengend, verwenden cursor.count()

+0

danke, es hat jetzt funktioniert – sid297

3

Es gibt drei verschiedene Methoden, die Sie in diesem Zusammenhang verwenden können.

  • cursor.count() ändert den Cursor, um die Anzahl der Dokumente in der Ergebnismenge, anstatt die Dokumente selbst zurückzukehren.

  • cursor.itcount() Ermittelt die Gesamtzahl der Dokumente in dem Cursor clientseitige durch Abrufen und die Ergebnismenge iteriert.

  • cursor.size() eine Zählung der Dokumente in dem Cursor Kosten nach überspringen Anwendung() und limit() Methoden.

cursor.length ist kein empfohlener Ansatz.