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

230
Views
¿Cómo desarmar campos según el nombre de los campos con una condición "menor que"?

Estoy tratando de desarmar ciertos campos según el nombre del campo (la clave).

Digamos que tengo algo como esto:

 { 5: "cool", 93: "cool", 30: "cool", 56: "cool" }

¿Cómo desarmaría todos los campos con un valor por debajo de, digamos, 40?

Así que el resultado debería ser:

 { 5: "cool", 30: "cool" }

Intenté usar el comando menor que en todo el campo o usar el operador posicional, pero ambos fallaron.

 collection.update_one( {"_id": id}, {"$unset": {"blacklist.$": {"$lt": 40}}} )

No pude encontrar nada en línea o en los documentos, así que espero encontrar ayuda aquí,

¡Gracias!

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Realmente no puede usar $unset de esta manera, aún podemos lograr esto usando actualizaciones canalizadas, con una sintaxis un poco más complicada.

Nuestro enfoque será convertir nuestro objeto raíz en una matriz usando $objectToArray , iterar sobre él y filtrar todas las claves numéricas por debajo de un cierto umbral. luego, finalmente, vuelva a convertirlo en un objeto y actualice nuestro documento, así:

 db.collection.update({}, [ { $replaceRoot: { newRoot: { $arrayToObject: { $filter: { input: { $objectToArray: "$$ROOT" }, cond: { $cond: [ { $regexMatch: { input: "$$this.k", regex: "^[0-9]+$" } }, { $lt: [ { $toInt: "$$this.k" }, 40 ] }, true ] } } } } } } ])

Parque infantil Mongo

over 4 years ago · Santiago Trujillo Report

0

Consulta

  • en [] la $$ROOT
  • filtrar las claves para que sean "_id" o < 40
  • volver al objeto y
  • reemplazar raíz

*esto elimina todos los campos >=40 , puede cambiar el último $lt si no lo necesita

* la respuesta de toms funciona y es más general, si tiene claves mixtas que algunas son números y otras no usan la forma de toms (esto es un poco más simple pero supone que todos los campos son números excepto el "_id")

Código de prueba aquí

 aggregate( [{"$replaceRoot": {"newRoot": {"$arrayToObject": [{"$filter": {"input":{"$objectToArray":"$$ROOT"}, "cond": {"$or": [{"$eq":["$$this.k", "_id"]}, {"$lt":[{"$toInt":"$$this.k"}, 40]}]}}}]}}}])
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!