Eu tenho um documento de um mangusto que quero estender antes da codificação JSON e enviar como resposta. Se eu tentar adicionar propriedades ao documento, ele será ignorado. As propriedades não aparecem, Object.getOwnPropertyNames(doc)
tornando impossível uma extensão normal. O estranho é que JSON.parse(JSON.encode(doc))
funciona e retorna um objeto com todas as propriedades corretas. Existe uma maneira melhor de fazer isso?
200
Model.find({})
retorno de documentos é uma matriz. Você pode docs.toObject?var docArray = modelArray.map(function(model) { return model.toObject(); });
Outra maneira de fazer isso é informar ao Mongoose que tudo o que você precisa é de uma versão JavaScript simples do documento retornado usando
lean()
a cadeia de consulta. Dessa forma, o Mongoose ignora a etapa de criação da instância completa do modelo e você obtém diretamente umadoc
modificação:fonte
lean
geralmente é mais eficiente porque você ignora a sobrecarga da criação do documento completo do Mongoose.lean()
da consulta define a opção antes que a consulta seja realmente executada (porexec
) para que os resultados estejam diretamente em sua forma "enxuta". Veja esta pergunta para ver o lado positivo do impacto no desempenho da chamadalean
.o caminho mais rápido se a propriedade não estiver no modelo:
document.set( key,value, { strict: false });
fonte
Uma maneira melhor de resolver um problema como esse é usando
doc.toObject()
esseoutras opções incluem:
getters:
aplicar todos os getters (caminho e getters virtuais)virtuals:
aplicar getters virtuais (pode substituir a opção getters)minimize:
remover objetos vazios (o padrão é true)transform:
uma função de transformação a ser aplicada ao documento resultante antes de retornardepopulate:
despovoar todos os caminhos preenchidos, substituindo-os por suas referências originais (o padrão é false)versionKey:
se deve incluir a chave da versão (o padrão é true)então, por exemplo, você pode dizer
e agora vai funcionar.
Para referência, consulte: http://mongoosejs.com/docs/api.html#document_Document-toObject
fonte
Para obter um objeto simples do documento Mongoose, usei a
_doc
propriedade da seguinte maneiraEu tentei com
toObject
mas me deu funções, argumentos e todas as outras coisas que eu não preciso.fonte
_
no início não é a solução ideal. Usar o lean pode resolver seu caso._doc
propriedade muitas vezes sem enfrentar nenhum problema. E usar olean
método fornece um objeto simples no qual você não pode executar operações do modelo mangusto.Você também pode especificar o objeto e, em seguida, analisar novamente para criar o objeto normal. Por exemplo, como: -
fonte