Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

658
Vistas
consulta mongodb para filtrar la matriz de objetos usando el operador $ gte y $ lte

Mis documentos:

 [{ "_id":"621c6e805961def3332bcf97", "title":"monk plus", "brand":"venture electronics", "category":"earphones", "variant":[ { "price":1100, "impedance":"16ohm" }, { "price":1600, "impedance":"64ohm" }], "salesCount":185, "buysCount":182, "viewsCount":250 }, { "_id":"621c6dab5961def3332bcf92", "title":"nokia1", "brand":"nokia", "category":"mobile phones", "variant":[ { "price":10000, "RAM":"4GB", "ROM":"32GB" }, { "price":15000, "RAM":"6GB", "ROM":"64GB" }, { "price":20000, "RAM":"8GB", "ROM":"128GB" }], "salesCount":34, "buysCount":21, "viewsCount":80 }]

Rendimiento esperado

 [{ _id:621c6e805961def3332bcf97 title:"monk plus" brand:"venture electronics" category:"earphones" salesCount:185 viewsCount:250 variant:[ { price:1100 impedance:"16ohm" }] }]

He probado este método de agregación.

 [{ $match: { 'variant.price': { $gte: 0,$lte: 1100 } }}, { $project: { title: 1, brand: 1, category: 1, salesCount: 1, viewsCount: 1, variant: { $filter: { input: '$variant', as: 'variant', cond: { $and: [ { $gte: ['$$variant.price',0] }, { $lte: ['$$variant.price',1100] } ] } } } }}]

Este método devuelve el resultado esperado, ahora mi pregunta es si hay algún otro enfoque mejor que devuelva el resultado esperado. Además, gracias de antemano, y como soy nuevo en la base de datos nosql, tengo curiosidad por aprender de la comunidad. Tome nota sobre resultado esperado todas las propiedades de un documento en particular deben devolver solo la matriz variante del objeto que quiero filtrar según el precio.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

su solución es buena, solo asegúrese de aplicar su $ coincidencia y paginación antes de aplicar este paso para consultas más rápidas

over 4 years ago · Santiago Trujillo Denunciar

0

No hay nada malo con su canalización de agregación y hay otras formas de hacerlo. Si solo desea devolver documentos coincidentes, con solo el primer elemento de matriz coincidente , aquí hay otra forma de hacerlo. (Desafortunadamente, la sintaxis .$ solo devuelve la primera coincidencia).

 db.collection.find({ // matching conditions "variant.price": { "$gte": 0, "$lte": 1100 } }, { title: 1, brand: 1, category: 1, salesCount: 1, viewsCount: 1, // only return first array element that matched "variant.$": 1 })

Pruébalo en mongoplayground.net .

O bien, si desea utilizar una canalización de agregación y devolver todos los documentos coincidentes en su totalidad, excepto la matriz filtrada, puede simplemente "sobrescribir" la matriz con los elementos que desee mediante "$set" (o su alias "$addFields" ). . Hacer esto significa que no necesitarás "$project" nada.

 db.collection.aggregate([ { "$match": { "variant.price": { "$gte": 0, "$lte": 1100 } } }, { "$set": { "variant": { "$filter": { "input": "$variant", "as": "variant", "cond": { "$and": [ { "$gte": [ "$$variant.price", 0 ] }, { "$lte": [ "$$variant.price", 1100 ] } ] } } } } } ])

Pruébalo en mongoplayground.net .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda