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

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

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