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

117
Vistas
Filtrar datos de matriz en matriz mongo

Tengo esta estructura de datos:

 { date: 0, darwin: [ { d: ['string1', 1, 0, 0, 0] }, { d: ['string2', 1, 0, 0, 0] }, { d: ['string3', 1, 0, 0, 0] } ] }

y este esquema:

 const mongoose = require('mongoose'); const { Schema } = mongoose; const dataSchema = new Schema({ date: { type: Number, required: false, unique: true, index: true }, humanDate: { type: Date, required: false }, darwin: [ { d: { type: Array, required: false } } ] }); module.exports = mongoose.model('data', dataSchema);

Necesito una lista de cadenas dentro de "d", pruebo esto

 db.getCollection('data').find({date:0},{'darwin.d.$': 1})

pero tengo este error

 Error: error: { "operationTime" : Timestamp(1635348468, 1), "ok" : 0, "errmsg" : "positional operator '.$' couldn't find a matching element in the array", "code" : 51246, "codeName" : "Location51246", "$clusterTime" : { "clusterTime" : Timestamp(1635348468, 1), "signature" : { "hash" : BinData(0,"pfgMUIJkpgjlfnQ6cfiEDpSY+3o="), "keyId" : NumberLong("7020434099001098244") } }}

He probado varias cosas pero no consigo que me salga la lista de cadenas, no se si estoy aplicando mal el operador '$'

esperaba alguno asi

 { date: 0, darwin: [ { d: 'string1' }, { d: 'string2' }, { d: 'string3' } ] }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puedes usar un método agregado como este:

  • Primero $match los documentos donde la date tiene el valor deseado
  • Luego $project para mapear sobre la matriz y obtener los valores que desea: para cada elemento en la matriz darwin , obtenga el primer elemento en la matriz d usando $arrayElemAt .
 db.collection.aggregate([ { "$match": { "date": 0 } }, { "$project": { "_id": 0, "date": 1, "darwin": { "$map": { "input": "$darwin", "as": "m", "in": { "d": { "$arrayElemAt": [ "$$md", 0 ] } } } } } } ])

Cual salida es:

 [ { "darwin": [ { "d": "string1" }, { "d": "string2" }, { "d": "string3" } ], "date": 0 } ]

Ejemplo aquí

about 4 years ago · Juan Pablo Isaza 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