我有一個來自貓鼬的文檔,發現我想在JSON編碼之前擴展並作爲響應發送出去。如果我嘗試向文檔添加屬性,它將被忽略。這些屬性不會出現在Object.getOwnPropertyNames(doc)
中,因此無法進行正常的擴展。奇怪的是,JSON.parse(JSON.encode(doc))
工作並返回一個對象與所有正確的屬性。有一個更好的方法嗎?如何將Mongoose文檔轉換爲普通對象?
回答
貓鼬Model
s從Document
s繼承,它有一個toObject()
方法。我相信你所要找的應該是doc.toObject()
的結果。
http://mongoosejs.com/docs/api.html#document_Document-toObject
另一種方式來做到這一點是告訴貓鼬,所有你需要的是一個普通的JavaScript通過在查詢鏈使用lean()
版本返回的文檔中。這樣,貓鼬跳過創建完整的模型實例的步驟,你直接得到doc
可以修改:
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
toObject不適合我。精益()是完美的 – Deminetix
節點說doc沒有toObject()方法,但.lean()的作品就像魔術一樣! – salihcenap
偉大的提示,謝謝! –
快速的方式,如果該物業的模式是不是:
document.set(key,value, { strict: false });
是的......並且儘可能讓人驚訝,但我仍然認爲這可能是有用的。例如,你保留所有對象的基元。 –
感謝這個答案,這是我一直在尋找:) – datUser
解決像這樣的問題的更好方法是使用doc.toObject()
這樣使用
doc.toObject({ getters: true })
其他選項包括:
getters:
應用所有的吸氣劑(路徑和虛擬的getter)virtuals:
應用虛擬吸氣劑(可以覆蓋吸氣劑選項)minimize:
刪除空物體(默認爲true)transform:
變換函數在返回之前應用於生成的文檔depopulate:
將所有填充的路徑填充爲全部填充路徑,將其替換爲其原始參考(默認設置爲false)versionKey:
是否包括版本鍵(默認爲true)
因此,例如,你可以說
Model.findOne().exec((err, doc) => {
if (!err) {
doc.toObject({ getters: true })
console.log('doc _id:', doc._id)
}
})
,現在它會工作
- 1. 如何將JavaScript「特定對象」轉換爲「普通對象」?
- 2. 如何將普通對象轉換爲基本數組?
- 3. 如何將JavaScript對象轉換爲普通字符串?
- 4. 將普通的舊對象轉換爲值對象
- 5. 將jQuery對象轉換爲普通對象
- 6. MongoDb c#將文檔轉換爲對象
- 7. 如何將嵌套的普通js對象轉換爲Ember.js對象?
- 8. 如何將普通類轉換爲MVC?
- 9. 如何將索引數組轉換爲Mongoose文檔?
- 10. iOS - 將HTML轉換爲普通文本
- 11. 如何將mongoose js模型轉換爲對象
- 12. 如何將對象轉換爲XML文檔
- 13. 如何將文檔對象轉換爲輸入源?
- 14. 如何將xml文檔對象轉換爲字符串?
- 15. 如何將T對象動態地轉換爲Amazon DynamoDB文檔
- 16. 如何將MongoDB文檔轉換爲JSON對象
- 17. 如何將MongoEngine文檔對象轉換爲BSON?
- 18. 續集,將實體轉換爲普通對象
- 19. 將字符串轉換爲普通對象
- 20. 將文檔對象轉換爲XML文檔JQuery?
- 21. 如何將普通文本轉換爲粗體文本?
- 22. 如何將unicode文本轉換爲普通文本
- 23. 轉換爲普通
- 24. 轉換爲普通
- 25. 如何將對象類型的數組向下轉換爲普通數組?
- 26. 如何將類對象轉換爲通用對象類型?
- 27. 如何轉換爲普通集合
- 28. 如何普通錶轉換爲CKEDITOR表
- 29. 如何使用Scala將普通類轉換爲JSON並將其轉換爲JSON?
- 30. 如何將iText文檔轉換爲javax.activation.DataSource?
這做到了...謝謝。 – respectTheCode
沒有爲我工作。下面的解決方案做到了。 – Antoine
toObject undefined – John