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

651
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 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