He guardado la siguiente consulta como med.js
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); Cuando estoy ejecutando esta consulta como
mongo dbName --puerto 13017 ~/Documentos/med.js
la salida es el total de entradas: 491502 falso
total actualizado: 0
¿Cómo es que las entradas totales se muestran como 491502 pero hasNext() es falso? no va en el ciclo while
La función cursor.length() agota el cursor convirtiéndolo en una matriz. Compruebe el código de función.
>cur.length function (){ return this.toArray().length; } Por lo tanto, te estás volviendo false .
Para obtener el conteo sin agotar el cursor, use cursor.count()
Hay tres métodos diferentes que puede utilizar en este contexto.
cursor.count() Modifica el cursor para devolver el número de documentos en el conjunto de resultados en lugar de los documentos en sí.
cursor.itcount() Calcula el número total de documentos en el lado del cliente del cursor obteniendo e iterando el conjunto de resultados.
cursor.size() Devuelve un recuento de los documentos en el cursor después de aplicar los métodos skip() y limit().
cursor.length no es un enfoque recomendado.