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

791
Visualizações
Agregación de MongoDB, nodejs genera consultas dinámicas con AND & OR

Tengo una consulta con agregación para MongoDB en mi código nodejs.

 const query = { '$expr':{ '$and':[ {'$eq': ['$appId', req.user.appId]}, ] } }

Desde la interfaz, se recibe un objeto de filtro, de la siguiente manera:

 { shops: '604c776763c302032e610347', offset: '0', limit: '20', }

Necesito insertar dinámicamente la identificación de las tiendas en mi consulta. debe ser appId -> user.appID Y targetFrom || targetTo <- tiendas ( desde el objeto de filtro )

las tiendas pueden ser una identificación o una matriz de identificaciones , para esto estoy usando el operador $in

 query['$expr']['$and'].push({ $eq: [ { $or: [ {"targetFrom": {$in: bb}}, {"targetTo": {$in: bb}} ] } ] })

La versión anterior del código era la siguiente:

 const query = { $and: [ {appId: req.user.appId} ] } query['$and'].push({ $or: [ {"targetFrom": {$in: bb}}, <- in bb is mongodb objectID {"targetTo": {$in: bb}} ] })

Actualizar

¿Cómo puedo buscar algún item por ID en mi matriz de items ?

 if(req.query.products) { typeof req.query.products === 'string' ? req.query.products = [req.query.products] : req.query.products let bb = req.query.products.map(function(el) { return mongoose.Types.ObjectId(el) }) query['$expr']['$and'].push({ $and: [ { items: { $in: ['item.itemId', bb] } } ] }) }
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Por favor, vea si lo siguiente responde a su requerimiento:

Enlace al parque infantil Mongo

Suposiciones:

  1. req.user.appId es una cadena.
  2. bb es una matriz de objectIds o cadenas ( [ObjectId("asdfsd"),ObjectId("badsfds")] , etc.)
 const query = { "$expr": { $and: [{ "$eq": ["$appId",req.user.appId], }] } } query['$expr']['$and'].push({ $or: [ { $in: [ "$targetFrom", bb ] }, { $in: [ "$targetTo", bb ] } ] })

Editar: se actualiza el requisito: obtenga todos los objs con un ID de targetTo appId targetFrom de una matriz dada, y la date está entre la fecha de startDate y la fecha de endDate :

Parque infantil Monog

En el mongoplayground anterior, busco todos los objetos donde appId es "1", startDate es 2022-01-01 , endDate es 2022-01-31 y bb es ["a","c","x"] . Esto debería obtener los 3 documentos, pero la fecha filtra el tercer documento, porque la date en ese documento es 2021-12-24 . Si cambia la fecha antes de eso, obtendrá los 3.

 const query = { "$expr": { $and: [{ "$eq": ["$appId",req.user.appId], }] } } query['$expr']['$and'] = query['$expr']['$and'].concat([{ $and: [ { $gte: [ "$date", startDate ] }, { $lt: [ "$date", endDate ] } ] },{ $or: [ { $in: [ "$targetFrom", bb ] }, { $in: [ "$targetTo", bb ] } ] }])

Editar: Requisito actualizado: es necesario agregar el filtro items.id .

Enlace del parque infantil Mongo

SI desea filtrar documentos si ningún objeto en los items tiene la identificación dada, simplemente agregue el objeto adicional que agregué en la matriz $and en la $match stage .

 { $in: [ 1, "$items.id", ] }

SI no desea filtrar dichos documentos, pero desea filtrar todos los objetos en los items donde items.id NO es la ID dada, la única solución que pude encontrar es usar una etapa $project , agregada en el nuevo mongoplayground Enlace.

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