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

404
Views
¿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 answers
Answer question

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