J'ai un document d'une mangouste que je souhaite étendre avant l'encodage JSON et l'envoyer comme réponse. Si j'essaie d'ajouter des propriétés au document, il est ignoré. Les propriétés n'apparaissent pas en Object.getOwnPropertyNames(doc)
rendant impossible une extension normale. La chose étrange est que cela JSON.parse(JSON.encode(doc))
fonctionne et renvoie un objet avec toutes les propriétés correctes. Y a-t-il une meilleure manière de faire cela?
200
Model.find({})
le retour de documents est un tableau. Pouvez-vous docs.toObject?var docArray = modelArray.map(function(model) { return model.toObject(); });
Une autre façon de le faire est de dire à Mongoose que tout ce dont vous avez besoin est une version JavaScript simple du document renvoyé en utilisant
lean()
dans la chaîne de requête. De cette façon, Mongoose ignore l'étape de création de l'instance de modèle complète et vous obtenez directement un quedoc
vous pouvez modifier:la source
lean
est généralement plus performant car vous ignorez la surcharge de création initiale du document Mongoose complet.lean()
de la requête définit l'option avant que la requête ne soit réellement exécutée (parexec
) afin que les résultats soient directement sous leur forme "allégée". Consultez cette question pour connaître l'impact positif sur les performances de l'appellean
.la manière rapide si la propriété n'est pas dans le modèle:
document.set( key,value, { strict: false });
la source
Une meilleure façon d'aborder un problème comme celui-ci consiste à utiliser
doc.toObject()
comme ceciles autres options incluent:
getters:
appliquer tous les getters (chemin et getters virtuels)virtuals:
appliquer des getters virtuels (peut remplacer l'option getters)minimize:
supprimer les objets vides (par défaut true)transform:
une fonction de transformation à appliquer au document résultant avant de retournerdepopulate:
dépeupler tous les chemins remplis, en les remplaçant par leurs références d'origine (par défaut faux)versionKey:
s'il faut inclure la clé de version (par défaut true)Ainsi, par exemple, vous pouvez dire
et maintenant ça va marcher.
Pour référence, voir: http://mongoosejs.com/docs/api.html#document_Document-toObject
la source
Pour obtenir un objet simple à partir du document Mongoose, j'ai utilisé la
_doc
propriété comme suitJ'ai essayé avec
toObject
mais ça m'a donné des fonctions, des arguments et toutes autres choses dont je n'ai pas besoin.la source
_
au début ce n'est pas la solution idéale. L'utilisation de Lean pourrait résoudre votre cas._doc
propriété plusieurs fois sans faire face à aucun problème. Et l'utilisation de lalean
méthode vous donne un objet simple sur lequel vous ne pouvez pas effectuer d'opérations sur le modèle mangouste.Vous pouvez également stringifier l'objet, puis à nouveau analyser pour créer l'objet normal. Par exemple, comme: -
la source