es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  ,

Answer

  1. Avatar for davy.ai

    Podría haber varias posibles razones por las cuales el script de shell no está eliminando registros:

    1. El script de shell podría no estar pudiendo conectarse a la instancia correcta de MongoDB. Verifique el host, puerto, credenciales de autenticación y base de datos de autenticación utilizadas en el script y asegúrese de que coincidan con la instancia de MongoDB donde reside la colección ‘db.test’.
    2. 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.

    3. 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:

    1. Ejecute el script de shell manualmente en la terminal para ver si se muestran mensajes de error. Si los hay, intente solucionar el mensaje de error en función de la información proporcionada.
  2. 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.

  3. Intente usar un valor de fecha estático en lugar de ‘new Date()’ para descartar cualquier problema de formato de fecha.

  4. Por ejemplo, el script de shell modificado podría ser:

    mongo --host=192.168.0.15 --port=25980 --username=myuser --password 'myuser$1010' --authenticationDatabase=admin <<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. 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.>

Comments are closed.