2017-05-23 113 views
1

尋找在將對象屬性發送到前端之前移除對象屬性的方法。
是否有任何理由,這是工作:貓鼬從對象中移除屬性

var obj = { 
    name: 'cris', 
    age: 22, 
} 
console.log(obj) //output name, age 
delete obj.name 
console.log(obj) //output age 

,這是不是:

User.findOne({ username: req.query.username }, function (err, user) { 
    if (user != null) { 
     console.log(user) //output all props 
     delete user.salt || delete user['salt'] 
     console.log(user) //output all props 
    } 
}); 

回答

2

user是貓鼬的文件,而不是常規的對象。

你可以將其轉換爲一個使用toObject()

user = user.toObject(); 
1

貓鼬將返回模型的實例,而不是一個簡單的JS對象,你正在尋找。您正在查找的數據可以通過使用user.toObject()訪問。

1

db.collection.findOne()方法返回一個光標。您需要使用toObject()轉換爲對象。使用user.toObject(),然後刪除併發送給客戶端。

4

使用刪除,你需要通過調用toObject到模型文件轉換成普通的JavaScript對象:

User.findOne({ username: req.query.username }, function (err, user) { 
    if (user != null) { 
     console.log(user) //output all props 
     user = user.toObject(); 
     delete user.salt || delete user['salt'] 
     console.log(user) //remove salt prop 
    } 
}); 

也可以修改使用此

User.findOne({}, function(err, user){ 
    user.key_to_delete = undefined; 
    user.save(); 
}); 
+0

感謝它的工作原理 –

+0

如果設置一個屬性爲'undefined',然後調用'save()',它只保存這個檢索到的實例的變化嗎? (即,不是數據庫中的實際文檔記錄?)*編輯*我沒有嘗試過,它隻影響檢索到的實例(非常酷)。對我來說唯一的事情就是我的密碼鹽字段是必需的,所以當我調用'.save()'它會標記一個驗證錯誤(但仍然返回我的json數據,所以我猜它全部好)...我想知道最佳實踐就像在將它轉換成'toObject()'後把它轉換成它最好是把它從貓鼬中拿出來,但是好奇別人怎麼想。 – natureminded