Eliminar todos los documentos anteriores a 7 días en MongoDB.
Soy un traductor de español que traduce documentos de IT. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown
Puedo eliminar todos los documentos anteriores a 7 días desde la shell de mongo con la siguiente consulta..
db.test.remove({"trans_date" : {"$lt": new Date(new Date().setDate(new Date().getDate() - 7))}});
–>resultado al ejecutar la consulta
WriteResult({ "nRemoved" : 9 })
Pero con la misma consulta en el script de shell no se eliminan registros, a continuación se muestra el código del script de shell..
mongo --host=192.168.0.15 --port=25980 --username=myuser --password 'myuser$1010' --authenticationDatabase=admin << EOF
use db1;
db.test.remove({"trans_date" : {"$lt": new Date(new Date().setDate(new Date().getDate() - 7))}});
exit;
EOF
–>resultado al ejecutar el script de shell
WriteResult({ "nRemoved" : 0 })
Por favor sugiera cómo eliminar lo mismo con el script de shell, para que pueda programar el script de shell en el cronjob para
davy.ai
Podría haber varias posibles razones por las cuales el script de shell no está eliminando registros:
El script de shell podría no estar pudiendo encontrar la colección ‘db.test’. Verifique si el nombre de la colección y la base de datos ‘db’ son correctos.
El script de shell podría no estar manejando correctamente el formato de fecha. En JavaScript, el formato del objeto de fecha puede ser diferente de un sistema a otro. Es posible que el formato de fecha en el script de shell no coincida con el formato esperado en la consulta de MongoDB.
Para solucionar estos problemas, pruebe los siguientes pasos de solución de problemas:
Modifique el script de shell para incluir algunas declaraciones de depuración, como imprimir el valor de fecha utilizado en la consulta de MongoDB, y verifique si coincide con el formato esperado.
Intente usar un valor de fecha estático en lugar de ‘new Date()’ para descartar cualquier problema de formato de fecha.
Por ejemplo, el script de shell modificado podría ser:
este script establece una variable
cutoffdate
con un valor de fecha estático e imprime en la consola antes de usarla en la consulta de mongodb. esto puede ayudar a verificar si el formato de fecha es interpretado correctamente tanto por el script de shell como por la consulta de mongodb. use=”” db1;=”” var=”” cutoffdate=”new” date(‘2021-10-15t00:00:00z’);=”” print(“fecha=”” de=”” corte:=”” +=”” cutoffdate.toisostring());=”” db.test.remove({“trans_date”=”” :=”” {“$lt”:=”” cutoffdate}});=”” exit;=”” eof=””="" este="" script="" establece="" una="" variable="" `cutoffdate`="" con="" un="" valor="" de="" fecha="" estático="" e="" imprime="" en="" la="" consola="" antes="" de="" usarla="" en="" la="" consulta="" de="" mongodb.="" esto="" puede="" ayudar="" a="" verificar="" si="" el="" formato="" de="" fecha="" es="" interpretado="" correctamente="" tanto="" por="" el="" script="" de="" shell="" como="" por="" la="" consulta="" de=""></eof
use db1;
var cutoffdate = new date('2021-10-15t00:00:00z');
print("fecha de corte: " + cutoffdate.toisostring());
db.test.remove({"trans_date" : {"$lt": cutoffdate}});
exit;
eof
este script establece una variable
cutoffdate
con un valor de fecha estático e imprime en la consola antes de usarla en la consulta de mongodb. esto puede ayudar a verificar si el formato de fecha es interpretado correctamente tanto por el script de shell como por la consulta de mongodb.>