所以,我一直在使用貓鼬一段時間,並且發現了一些非常奇怪的東西。如果有人能夠啓發我,那將會很棒。mongoose .find()方法返回具有不需要屬性的對象
事情是,當使用貓鼬的.find()方法,我得到的對象是充滿屬性我不知道它來自哪裏(我猜他們是內置的屬性,但無論),我只想通過屬性I .select()進行迭代。得到它了?沒有?確定...解釋更好:
我有我的架構和模型中聲明:
var mySchema = mongoose.Schema({
name: String,
prop1: String,
prop2: String,
prop3: String
})
var myModel = DB.model('myDataBase', mySchema)
然後我想找到名稱的文件,比方說,約翰和檢索所有,但「姓名」字段,所以我去:
myModel.find({name: 'John'}, '-name', function(err, results){
log(results[0])
}
和log(結果[0])記錄
{ prop1: 'one',
prop2: 'two',
prop3: 'three' }
到目前爲止,一切都很好。但問題是,現在我想遍歷這些屬性並逐一檢查,我不確定每個結果會有多少'道具',所以我想要做類似的事情:
for(var key in results[0]){
log(key)
}
所以,我希望它會記錄'prop1','prop2'和'prop3',但不是!好吧,我得到道具1,2和3,但我也得到了很多其他的屬性和功能,如:isNew,error,_maxListeners,_doc等。不僅這些extras屬性,我還得到'name'屬性,一個我排除了選擇(它被排除在外,如第一個日誌中所示)。怪怪的?
但是等等!還有更多!我在網上搜索,發現一些人說:「夥計,當通過對象屬性迭代使用hasOwnProperty方法!」。所以我去了:
for (var key in results[0]){
if (results[0].hasOwnProperty(key)) log(key)
}
日誌結果是一些屬性(具體:$ __,是否新款,錯誤,_maxListeners,_doc,_pres,_posts,保存_events)和犯規包括任何的道具我首先想要的。
我的問題是,我如何迭代只有道具1,2和3,排除這些,我不知道,內置屬性和我明確排除參數中的一個? (PS:我想的解決方案不涉及必須將我的對象轉換爲數組,如果可能的話)
另外,不是一個問題本身,而是好奇心,這些屬性從哪裏來?爲什麼它們出現在for循環中而不是當我登錄對象時?爲什麼我排除的屬性('-name')也出現在for循環中?如果它不識別剛纔記錄的屬性,那麼它具有哪些屬性?
感謝您的時間和幫助! 再見!
.toObject()會給你一個普通的對象,也許這會有所幫助?額外的屬性是因爲你正在處理的是模型的一個實例,它不是一個普通的對象。 – 2015-02-10 22:19:08
謝謝@Kevin B!仍然有很多問題,但這確實解決了我的問題!發表您的評論作爲答案,所以我可以標記它的權利? BR! – 2015-02-10 22:29:14