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.

Filtrar con una subcadena en una matriz binaria utilizando pymongo.

Quiero filtrar los registros que contengan una cadena específica en un campo utilizando pymongo. El campo es de tipo matriz binaria.

También quiero filtrar según la parte de la fecha de datetime. El campo se recupera como datetime en Python, pero el tipo en Mongodb Compass se muestra como matriz. Por ejemplo, quiero obtener todos los registros con ‘2019-05-31’ donde los registros se almacenan en formato datetime y el tipo es matriz.

2019-05-31T22:49:15.722 +00:00

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para filtrar registros en un campo de tipo Array Binario que contiene una cadena específica, puedes usar el operador $in en pymongo. Aquí tienes un ejemplo de código:

    import pymongo
    
    # asumiendo que db es la instancia de MongoClient de pymongo
    my_collection = db['my_collection']
    
    # esta es la cadena específica que deseamos buscar
    my_string = b'hello'
    
    # filtrar los registros que contienen la cadena en el campo del array binario
    my_query = {'my_binary_array_field': {'$in': [my_string]}}
    
    # obtener los registros coincidentes
    my_records = my_collection.find(my_query)
    
    # iterar sobre los registros
    for record in my_records:
        # hacer algo con el registro
        pass
    

    Para filtrar basado en la fecha parte de un objeto datetime, puedes usar el operador $regex en pymongo para buscar una cadena de fecha específica. Aquí tienes un ejemplo de código:

    import pymongo
    import datetime
    
    # asumiendo que db es la instancia de MongoClient de pymongo
    my_collection = db['my_collection']
    
    # esta es la cadena de fecha específica que deseamos buscar
    my_date = datetime.datetime(2019, 5, 31)
    
    # dar formato a la cadena de fecha como patrón regex
    my_date_str = my_date.strftime('%Y-%m-%d')
    my_date_pattern = f'^{my_date_str}'
    
    # filtrar los registros que coincidan con la cadena de fecha en el campo del array
    my_query = {'my_date_array_field': {'$regex': my_date_pattern}}
    
    # obtener los registros coincidentes
    my_records = my_collection.find(my_query)
    
    # iterar sobre los registros
    for record in my_records:
        # hacer algo con el registro
        pass
    

    Nota que en MongoDB Compass se muestra como un array porque el campo de datetime es en realidad un array de objetos datetime. Para filtrar basado en una fecha específica, necesitamos hacer coincidir con la representación en cadena del objeto datetime.

Comments are closed.