Retornar Campos no mongoose

233 views
Skip to first unread message

Welington Monteiro

unread,
Aug 9, 2013, 2:57:59 PM8/9/13
to nod...@googlegroups.com
Alguem saber se é possivel configurar o schema do mongoose para retornar apenas alguns campos especificos?

var mondel = new Schemas({
   nome: {type: String, default: "", get:true},
   idInterno: nome: {type: String, default: "", get:false}
})

sem passar o comando select na funcao de retorno, pois meu objeto é muito grande( 50 campos no minimo) e inviavel ficar dando select em 90% dos campos, se pelo menos existisse um comando que fizesse o inverso do select.


Abs gelera.

Alan Hoffmeister

unread,
Aug 12, 2013, 7:39:26 AM8/12/13
to nod...@googlegroups.com
Qual a finalidade? Enviar um JSON ao client? Se for isso acho que seria mais viável remover os campos que o client não pode ver antes de enviar. Acho que o mongoose não oferece outra alternativa além do select, até por que não seria muito lógico criar um campo que nunca poderia ser lido :P
--
Você está recebendo esta mensagem porque se inscreveu no grupo "NodeJS Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para nodebr+un...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 


--
--
Att,
Alan Hoffmeister

Leonardo Ribeiro da Silva

unread,
Aug 12, 2013, 8:39:04 AM8/12/13
to nod...@googlegroups.com
Você pode criar schema virtuais, passando para o cliente o que de fato importa.
Ficaria dessa forma:

No seu schema:
SeuModel.virtual('customModel').get(function()
{
var sendData = {
userId : this._id.toString(),
friends : this.friendsList
};

return sendData;
});

na consulta:
SeuModel.find(...function (error, model){
var responseClient = model.customModel;

})
----------------------------------------------------------

Leonardo R. da Silva.
Email | dg.leon...@gmail.com

Rodrigo

unread,
Aug 12, 2013, 9:36:36 AM8/12/13
to nod...@googlegroups.com
Basta passar select: false no campo:

var mondel = new Schemas({
   nome: {type: String, default: "", select: true},
   idInterno: nome: {type: String, default: "", select: false}
})


-- 
Rodrigo K Nascimento

Welington Monteiro

unread,
Aug 12, 2013, 11:37:22 AM8/12/13
to nod...@googlegroups.com
No meu caso sim, por que existe um objeto de log do sistema que nunca é lido pelo cliente, e gravado junto como o schema.

Welington Monteiro

unread,
Aug 12, 2013, 11:38:27 AM8/12/13
to nod...@googlegroups.com
Valeu Rodrigo , vou testar essa flag nos campos do meu Schema. 
Abs galera!!!

Welington Monteiro

unread,
Aug 14, 2013, 9:20:42 PM8/14/13
to nod...@googlegroups.com
Ola Rodrigo, a flag no capo funcionou , mas so  funcionou para campos, como devo flegar um Objeto?

Exe.:

 var user = new Schema({
   nome: {type:String}
   id: {type: String, select:false},
   contato:{
        telefone :{type: String, select:false}
   }
});

No exemplo acima eu nao quero retornar o objeto contato, como devo flegar? E pensando nisso me surgiu outra duvida, pensei em criar um objeto schema de contato e usalo no schema user, assim conseguiria flea-lo, mas nao funcionou, fui a doc do mongoose e pecebi que la nao exite o tipo Objeto, existe type array,  como tambem eu deveria usar um schema como objeto dentro de um outro schema? 

Ex.:

 var contato= new Schema({
          telefone :{type: String, select:false}   
});

 var user = new Schema({
   nome: {type:String}
   id: {type: String, select:false},
   contato::{type: contato, select:false}
   }
});

Alguem tem alguma ideia de como fazer isso? ou ja passou por isso? Até porque eu queria estruturar os schemas em partes, para melhor manutenção.

Abs.

Rodrigo

unread,
Aug 15, 2013, 8:35:00 AM8/15/13
to nod...@googlegroups.com
Tenta assim, não sei se funciona:

 var contato = {
telefone: { type: String, select: false }
};

 var user = new Schema({
nome: { type: String },
id: { type: String, select:false },
contato: { type: contato, select: false }
});

-- 
Rodrigo K Nascimento

Welington Monteiro

unread,
Aug 15, 2013, 10:42:39 AM8/15/13
to nod...@googlegroups.com
Vou testar aqui e te dou um retorno, valeu por responder, mas e se eu quiser transformar o objeto contato em um schema? e coloca-lo dentro de outro schema como um objeto simples, nao teria como? como array basta fazer assim : 
 var contato = new Schema({
telefone: { type: String, select: false }
});

contatos :{type: [contato]}  ou 
contatos: [contato]

mas e como objeto?? Alguem ja precisou fazer isso?

Valew.

Rodrigo

unread,
Aug 15, 2013, 10:44:57 AM8/15/13
to nod...@googlegroups.com
Acho que nunca tentei.

-- 
Rodrigo K Nascimento

Welington Monteiro

unread,
Aug 22, 2013, 3:06:55 PM8/22/13
to nod...@googlegroups.com
Bom rodrigo o comando select: false, funcionou aqui para mim, 
e a pergunta que eu fiz sobre nao retornar um objeto inteiro , é so setar no schema todos os campos do objeto como false que o mongoose entende  que o objeto nao tem campos e nao retorna este. :)
Mas agora eu pergunto como faço para buscar um doc onde eu preciso incluir esse objeto no retorno? para fins de tratamento interno.
Por exemplo eu qero retornar um objeto que esta flegado como false para o retono, se eu pssar select.("objeto") ou select({objeto:0}), so me retorna este e o resto nao
Abs.

Rodrigo

unread,
Aug 22, 2013, 5:14:30 PM8/22/13
to nod...@googlegroups.com, nod...@googlegroups.com
.select("+nomeDoCampo")

Rodrigo Krummenauer do Nascimento
Celular: 51 96670281
Enviado de iPhone
Reply all
Reply to author
Forward
0 new messages