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

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

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

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