I’m starting to learn MongoDB, and I love how flexible it is.
But I’m stuck on a query, and I would like to know the solution.
I have a collection that goes like this:
{
"_id" : ObjectId("633e08f5edef7d5ffc6d0583"),
"etiquetaPrincipal" : "Inteligencia artificial",
"titular" : "¿Puede una máquina decidir cuánto debes cobrar?",
"subtitulo" : "Las empresas recurren a la inteligencia artificial para su política salarial, pero aún es imprescindible la supervisión humana para evitar sesgos o errores",
"autor" : "Raúl Limón",
"fecha" : ISODate("2022-10-04T05:20:00.000+0000"),
"etiquetas" : [
"Tecnología",
"Inteligencia artificial",
"Economía",
"Salarios",
"Computación",
"Mercado laboral",
"Ética científica",
"Ética",
"Aplicaciones de Inteligencia Artificial",
"Aplicaciones informáticas"
],
"noticia" : "¿Cuál es el salario justo? ¿Puede la inteligencia artificial establecerlo? Kotaro Hara, profesor de ciencias de la computación en la Universidad de Singapur cree que la primera pregunta plantea “un problema que necesita ser resuelto con urgencia”. Al fin y al cabo, un pacto de rentas es una de las soluciones propuestas ante la situación de crisis actual. A esto se une la precarización extrema de sectores menos cualificados —empleados en reparto o tareas domésticas pueden ganar entre 9 y 14 euros por hora— y, en el frente contrario, la guerra salarial abierta para atraer a los trabajadores más vinculados a sectores tecnológicos, donde más demanda se registra. La segunda cuestión —si puede la inteligencia artificial establecer el salario justo— tiene respuestas contradictorias: sí, porque puede aportar las herramientas para establecer cuánto se paga por una tarea determinada; pero no, porque sin supervisión humana, el algoritmo puede llevar a decisiones equivocadas. Aun así, muchas empresas empiezan a utilizar la inteligencia artificial para fijar sus políticas salariales."
}
My query has to:
Show all the fields except
etiquetas
of the news from September-29-2022
How do I do that?
2
Answers
Assume that you want to remove the field based on
fecha
value,$set
– Setetiquetas
field1.1.
$cond
– Comparefecha
value is greater than 2022-09-291.1.1. If
true
– remove the field.1.1.2. Else – remain the value.
Demo @ Mongo Playground
Reference
Exclude Fields Conditionally
The wording in the question is a little ambiguous. What does "from September-29-2022" mean specifically?
Generally speaking, @Yong Shun Yong’s answer is helpful in demonstrating how to conditionally exclude fields. In particular it will retrieve all documents from the collection, but will only remove the
etiquetas
field for those with a date after 29 September.Other possible interpretations are:
etiquetas
field removed. In this case you should definitely use the other answer as a starting point and add a$lt
clause to theif
condition (wrapping the two in an$and
).If
2.
above is the correct interpretation, then your query would look something like this:Associated playground link is here
And
3.
is what is needed, then you can add the$lt
predicate to the above query.Overall it is important to be specific about what logic you are requesting as the associated query to accomplish it may look very different.