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

156
Visualizações
Consultando dentro de una matriz de subdocumentos en mongodb

Soy realmente nuevo en la base de datos MongoDB o NoSQL. Tengo este esquema userSchema

 const postSchema = { title: String, posted_on: Date } const userSchema = { name: String, posts: [postSchema] }

Quiero recuperar las publicaciones de un usuario en el rango dado (/api/users/:userId/posts?from=date&to=date&limit=limit) usando la consulta mongodb . En una base de datos relacional, generalmente creamos dos conjuntos diferentes de tablas y consultamos la segunda tabla (publicaciones) usando alguna condición y obtenemos el resultado requerido. ¿Cómo podemos lograr lo mismo en mongodb? Intenté usar $elemMatch al referirme a esto , pero parece que no funciona.

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

0

2 formas de hacerlo con el marco de agregación, que puede hacer mucho más de lo que puede hacer un hallazgo.

Con find , en su mayoría seleccionamos documentos de una colección o proyecto para mantener algunos campos de un documento que está seleccionado, pero aquí solo necesita algunos miembros de una matriz, por lo que se usa la agregación.

Modo local (solución a nivel de documento) sin desconexión, etc.

Código de prueba aquí

Consulta

  • filtre la matriz y mantenga solo publicado_en> 1 y <4 (utilicé números para simplificar las fechas de uso, es lo mismo)
  • tomar los primeros 2 elementos de la matriz (límite 2)
 db.collection.aggregate([ { "$match": { "name": { "$eq": "n1" } } }, { "$set": { "posts": { "$slice": [ { "$filter": { "input": "$posts", "cond": { "$and": [ { "$gt": [ "$$this.posted_on", 1 ] }, { "$lt": [ "$$this.posted_on", 5 ] } ] } } }, 2 ] } } } ])

Solución Uwind (solución a nivel de colección) (es un poco más pequeño, pero mantener las cosas locales es mejor, pero en su caso no importa)

Código de prueba aquí

Consulta

  • coincidir con el usuario
  • desenrolle la matriz y haga que cada miembro sea ROOT
  • hacer coincidir las fechas >1 <4
  • límite 2
 db.collection.aggregate([ { "$match": { "name": { "$eq": "n1" } } }, { "$unwind": { "path": "$posts" } }, { "$replaceRoot": { "newRoot": "$posts" } }, { "$match": { "$and": [ { "posted_on": { "$gt": 1 } }, { "posted_on": { "$lt": 5 } } ] } }, { "$limit": 2 } ])
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