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

137
Visualizações
Agregar propiedades dinámicamente a la consulta de la base de datos en JavaScript

Estoy escribiendo una función para consultar una colección de base de datos de Firestore para documentos que solo tienen ciertas propiedades. Los filtros se definen como una matriz de pares "clave, valor". p.ej:

 [ ["Colour", "green"], ["Colour", "blue"], ["Greeting", "hello"] ]

Esta matriz puede tener cualquier longitud y estoy tratando de obtener todos los documentos de la base de datos que no tienen valores enumerados en la matriz de filtros.

Puedo hacer esto usando:

 await db.collection("database") .where("Colour", "!=", "blue") .where("Colour", "!=", "green") .where("Greeting", "!=", "hello") .get()

Mi problema es que el filtro puede tener cualquier longitud, por lo que no puedo escribir la consulta para tener un número determinado de métodos .where() . ¿Hay alguna forma en JavaScript de que pueda agregar dinámicamente métodos a una consulta como se muestra arriba (sin saber cuántos métodos necesito agregar)?

Mi solución en este momento es solo consultar la base de datos completa, luego ordenarla usando las funciones de filtro de Javascript, pero me gustaría solo tener que consultar la base de datos para obtener los valores necesarios.

Alternativamente, ¿hay alguna otra consulta de Firestore que pueda completar este filtro? Estaba mirando los documentos , pero la forma en que mi filtro está configurado con pares clave/valor que podrían repetirse o no estar definidos, no parecía que ninguno de los métodos de consulta complejos funcionara.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Suponiendo que está creando una matriz llena de pares clave-valor excluidos y que los valores que está excluyendo están indexados correctamente, podemos comenzar definiendo algunas constantes:

 const collectionRef = db.collection("database"); const excludedKeyValuePairs = [ ["Colour", "green"], ["Colour", "blue"], ["Greeting", "hello"], ]

Ahora que los tenemos, podemos construir la consulta usando Array#reduce .

 const query = excludedKeyValuePairs .reduce( (query, [key, value]) => query.where(key, "!=", value), // appends the new constraint, returning the new query object collectionRef ); const querySnapshot = await query.get();

Sin embargo, si puede usar el Firestore SDK modular más nuevo, también puede lograr el mismo resultado usando:

 import { getFirestore, getDocs, collection, query, where } from "firebase/firestore"; const db = getFirestore(); const collectionRef = collection(db, "database"); const constraints = [ where("Colour", "!=", "green"), where("Colour", "!=", "blue"), where("Greeting", "!=", "Hello") // elements can also be added or removed using standard array methods as needed. ] // OR const constraints = excludedKeyValuePairs.map(([key, value]) => where(key, "!=", value)) const querySnapshot = await getDocs(query(collectionRef, ...constraints));
about 4 years ago · Juan Pablo Isaza Relatório

0

Puede mapear desde su conjunto de condiciones a las cláusulas where con:

 const exclusions = [ ["Colour", "green"], ["Colour", "blue"], ["Greeting", "hello"], ] let collectionRef = db.collection("database"); const conditions = exclusions.map((e) => where(e[0], "!=", e[1])); let query = query(collectRef, conditions); const querySnapshot = await getDocs(query);
about 4 years ago · Juan Pablo Isaza 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