Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

316
Visualizações
La función de Python que toma un objeto json devuelve el objeto de consulta mongodb

Necesito tomar un JSON (condiciones para filtrar datos), datos de ejemplo:

 query = { "and": [ { "field": "model", "operator": ">", "value": "2005" }, { "or": [ { "field": "brand", "operator": "=", "value": "Mercedes" }, { "field": "brand", "operator": "=", "value": "BMW" } ] } ]

y escriba una función que transforme este JSON como una consulta de MongoDB para que pueda filtrar directamente los datos mientras lee de MongoDb (usaré estos datos dentro de la función ReadFromMongoDB de apache beam, como objeto de filtro)

por lo que la salida debería ser como:

 {'$and': [{'field': 'model', 'operator': '>', 'value': '2005'}, { '$or': [ {'field': 'brand', 'operator': '=', 'value': 'Mercedes'}, {'field': 'brand', 'operator': '=', 'value': 'BMW'} ] }]}

(Tengo una función que transforma cada objeto individual en una consulta MongoDB, así que no te preocupes por eso)

LO QUE INTENTÉ

Como no sé cómo vendrán los datos anidados, utilicé la recursividad en mi función. Pero se complica y la salida no es como esperaba.

 def splitToItems(query, items={}): if 'and' in query: for item in query['and']: if 'and' in item or 'or' in item: splitToItems(item) else: if '$and' not in items: items['$and'] = [item] # print(items) else: items['$and'].append(item) # print(items) if 'or' in query: for item in query['or']: if 'and' in item or 'or' in item: return splitToItems(item) else: if '$or' not in items: items['$or'] = [item] # print(items) else: items['$or'].append(item) # print(items) print(items) ------- OUTPUT: # '$or' should have been inside of the first array in this case { '$and': [{'field': 'model', 'operator': '>', 'value': '2005'}], '$or': [{'field': 'brand', 'operator': '=', 'value': 'Mercedes'}, {'field': 'brand', 'operator': '=', 'value': 'BMW'}] }

¿Alguna idea sobre cómo mejorar esta función o hacer que funcione? Muchas gracias de antemano

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Espero haber entendido bien la pregunta

 def splitToItems(query, items={}): q = {} if 'and' in query: l = [] for item in query['and']: l.append(splitToItems(item)) q["$and"] = l if 'or' in query: l = [] for item in query['or']: l.append(splitToItems(item)) q["$or"] = l if q: return q return query print(splitToItems(query))

¿Esto resuelve tu problema?

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda