Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

345
Views
Mongodb encuentra una longitud de matriz mayor que el tamaño especificado

Tengo este esquema de modelo Mongoose

 const postSchema = new Schema({ title: String, headline: [{ kind: String, id: Schema.Types.ObjectId, content: String, relevance: Number, _id: false }], });

Quiero encontrar modelos en la base de datos donde la matriz de headline tenga una longitud mayor que x

tengo esta consulta:

 const query = { 'headline.kind': 'topic', 'headline.id': topicId, 'headline':{ '$size':{ '$gt': x } } };

pero cuando uso esto me sale:

 { MongooseError: Cast to number failed for value "{ '$gt': 2 }" at path "headline" at CastError (/home/oleg/WebstormProjects/lectal/api/node_modules/mongoose/lib/error/cast.js:26:11)

alguien sabe la forma correcta de construir esta consulta? (En mi código simplemente codifiqué el número 2 para x).

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Para la forma más eficiente, puede hacer esto con una "notación de puntos" especificando la posición n . Lo que básicamente significa que si una matriz tiene "al menos" n + 1 elementos, entonces devuélvalo.

Entonces, en lugar de escribir { "$gt": 2 } , busca la presencia del valor de índice del elemento "tercero" (desde el índice cero, el tercero es 2):

 { "headline.2": { "$exists": true } }

El operador $exists está buscando la presencia de un elemento en ese índice dado, y cuando se cumple la condición, la matriz debe tener al menos esa longitud y, por lo tanto, "mayor que dos".

También tenga en cuenta que su condición de consulta quiere hacer coincidir varias propiedades en un elemento de matriz, y para esto realmente usa $elemMatch , de lo contrario, las condiciones realmente se aplican para hacer coincidir cualquier elemento en la matriz, y no solo el que tiene "ambas" condiciones como $elemMatch lo hace.

 { "headline": { "$elemMatch": { "kind": "topic", "id": topicId } }, "headline.2": { "$exists": true } }

para hacer eso "dinámicamente", simplemente construimos la consulta generando la clave a partir del parámetro:

 const query = { "headline": { "$elemMatch": { "kind": "topic", "id": topicId } } }; query['headline.'+x] = { "$exists": true }
over 4 years ago · Santiago Trujillo Report

0

Por lo que he leído, no es posible hacer eso usando $size y $gt .

Intente usar $where - http://mongoosejs.com/docs/api.html#query_Query-%24where

over 4 years ago · Santiago Trujillo Report

0

$expr:{$gte: [{$size: "$preferredArray"}, specifiedsize]}

Si está utilizando agregado, es mejor y más rápido; toda la consulta se vería así:

 db.collection.aggregate([ { $match: { preferred criteria:1, $expr:{$gte: [{$size: "$diagnosis"}, 2]} } },
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!