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.

Cómo anular campos basados en el nombre de los campos con una condición de “menor que”?

Estoy tratando de eliminar ciertos campos basados en el nombre del campo (la clave).

Digamos que tengo algo como esto:

{
    5: "cool",
    93: "cool",
    30: "cool",
    56: "cool"
}

¿Cómo puedo eliminar todos los campos con un valor menor, digamos, a 40?

Entonces, el resultado debería ser:

{
    5: "cool",
    30: "cool"
}

Intenté usar el comando “menor que” en todo el campo o usar el operador posicional, pero ambos fallaron.

collection.update_one(
        {"_id": id},
        {"$unset": {"blacklist.$": {"$lt": 40}}}
    )

No pude encontrar nada en línea o en la documentación, así que espero encontrar algo de ayuda aquí.

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para desactivar los campos basándose en su nombre clave y valor, puedes utilizar el operador $unset en combinación con el operador $where en la consulta de actualización. Aquí tienes un ejemplo de código utilizando Pymongo:

    db.collection.update_many(
        { "$where": "function() { for (var key in this) { if (this.hasOwnProperty(key) && !isNaN(key) && Number(key) < 40) { return true; } } return false; }"},
        { "$unset": { "$$REMOVE": 1 } }
    )
    

    En este código, estamos utilizando una función de JavaScript en el operador $where para recorrer cada clave del documento y comprobar si es un valor numérico menor que 40. Si una clave cumple este criterio, la función devuelve true y el operador $unset la elimina del documento. La sintaxis $$REMOVE indica a MongoDB que elimine el valor asociado con la clave actual.

    Ten en cuenta que el operador $where puede ser lento en colecciones grandes, por lo que tal vez quieras considerar ejecutar esta operación en lotes o encontrar otra manera de estructurar tus datos para hacer las consultas más eficientes.

Comments are closed.