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

397
Vistas
¿Cómo devolver valores de objetos específicos relacionados con valores de privacidad?

Tengo este modelo de mangosta:

 var user = new Schema({ email : {type: String}, firstName: {type: String}, lastName: {type: String}, username: {type:String}, password: {type:String}, privacy : { displayEmail: {type: Boolean, default: true}, displayUsername: {type:Boolean: default: true}, displayfirstName: {type:Boolean: default: true}, displaylastName: {type:Boolean: default: true} })

Supongamos que el usuario establece el valor de displayLastName displayEmail false .

Luego, tengo una solicitud GET simple que devuelve un objeto json con todos los detalles de los usuarios. ¿Cómo puedo consultar mongo para devolver solo los campos que tienen true en el objeto de privacidad? Si displayfirstName es verdadero, entonces se debe devolver el valor de firstName .

Actualizar

 var user = new Schema({ email : {type: String}, firstName : {type: String}, lastName : {type: String}, username : {type:String}, password : {type:String}, privacy : { displayEmail : {type: Boolean, default: true}, displayUsername : {type:Boolean, default: true}, displayfirstName : {type:Boolean, default: true}, displaylastName : {type:Boolean, default: true}, displayAddress : {type: Boolean, default: true}, // new displayPhone : {type: Boolean, default: true} // new }, extraInfo : { userAddress : {type:String}, // new userPhone : {type: String} // new } })

¿Cómo puedo verificar condicionalmente el campo de dirección y teléfono?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La única manera que se me ocurre es a través de una canalización de agregación que tiene un operador $project con una expresión $cond que evalúa la condición y devuelve el valor de una de las otras dos expresiones según la lógica evaluada.

Tomemos, por ejemplo, ejecutar la siguiente canalización le dará un documento que muestra todos los campos, pero sus valores dependen de lo que tengan los campos del subdocumento de visualización; si es cierto, se devuelve el valor real; de lo contrario, se devuelve un valor nulo:

 User.aggregate([ { "$project": { "email": { "$cond": ["$privacy.displayEmail", "$email", null] }, "firstName": { "$cond": ["$privacy.displayfirstName", "$firstName", null] }, "lastName": { "$cond": ["$privacy.displaylastName", "$lastName", null] }, "username": { "$cond": ["$privacy.displayUsername", "$username", null] } } } ]).exec(function(err, users){ if (err) throw err; console.log(JSON.stringify(users, null, 4)); })

ACTUALIZAR

Siguiendo su otra pregunta de los comentarios, para verificar condicionalmente los campos de address y phone AND filtrar la colección usando la identificación de un parámetro GET , ejecute la canalización con un operador $match que actúa como una consulta y luego agregue los campos de información adicionales visualización condicional en su $project :

 var userId = mongoose.Schema.Types.ObjectId(req.parameter.userId); User.aggregate([ { "$match": { "_id": userId } }, { "$project": { "email": { "$cond": ["$privacy.displayEmail", "$email", null] }, "firstName": { "$cond": ["$privacy.displayfirstName", "$firstName", null] }, "lastName": { "$cond": ["$privacy.displaylastName", "$lastName", null] }, "username": { "$cond": ["$privacy.displayUsername", "$username", null] }, "userAddress": { "$cond": ["$privacy.displayAddress", "$extraInfo.userAddress", null] }, "userPhone": { "$cond": ["$privacy.displayPhone", "$extraInfo.userPhone", null] } } } ]).exec(function(err, users){ if (err) throw err; console.log(JSON.stringify(users, null, 4)); })
over 4 years ago · Santiago Trujillo 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