所以,當我使用Object.assign,(前Object.assign({FOO:BAR1},{FOO:BAR2})在一個特定的貓鼬子文檔架構,foo的: BAR2 OBJ不會覆蓋FOO:BAR1 OBJObject.assign()的貓鼬子文檔架構問題
在我的應用我有兩個子文檔架構的帳戶架構,項目&屬性它是在項目的子文檔模式,我遇到的問題
。這裏是我的模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ProjectSchema = new Schema({
_id: String,
name: String,
}, { strict: false })
var PropertySchema = new Schema({
_id: String,
slug: String,
name: String,
type: String,
placeholder: String,
order: Number
}, { strict: false })
var AccountSchema = new Schema({
_id: String,
name: String,
slug: String,
email: String,
properties: [PropertySchema],
projects: [ProjectSchema],
}, { strict: false })
module.exports = mongoose.model('Account', AccountSchema);
這裏是我的Middlew的片段是(我認爲這就是所謂的,如果我錯了,請糾正我)。這是我做Object.assign來覆蓋特定項目的屬性的地方。如果有幫助,我可以發佈所有路線。
router.route('/accounts/:account_id/projects/:project_id')
.get(function(req, res) {
Project.findById(req.params.project_id, function(err, project){
if (err)
res.send(err);
res.json(project);
});
})
.delete(function(req, res){
Account.findById(req.params.account_id, function(err,account){
if (err)
res.send(err);
account.projects.id(req.params.project_id).remove();
account.save(function(err) {
if(err)
res.send(err);
res.json({message: 'Project Deleted'});
});
})
})
.put(function(req, res){
Account.findById(req.params.account_id, function(err,account){
if (err)
res.send(err);
Object.assign(account.projects.id(req.params.project_id), req.body);
account.save(function(err) {
if(err)
res.send(err);
res.json({message: 'Project Updated'});
});
})
});
// ----------------------------------------------------
router.route('/accounts/:account_id/properties/:property_id')
.get(function(req, res) {
Property.findById(req.params.property_id, function(err, property){
if(err)
res.send(err);
res.json(property);
});
})
.delete(function(req, res){
Account.findById(req.params.account_id, function(err, account){
if (err)
res.send(err);
account.properties.id(req.params.property_id).remove();
account.save(function(err){
if(err)
res.send(err);
res.json({ message: 'Successfully Deleted' });
})
})
})
.put(function(req, res){
Account.findById(req.params.account_id, function(err, account) {
if (err)
res.send(err);
Object.assign(account.properties.id(req.params.property_id), req.body);
account.save(function(err) {
if(err)
res.send(err);
res.json({message: 'Property Updated'});
})
})
});
所以這是給我的問題,我可以GET,POST,沒有問題刪除put方法,但對項目的認沽部分是我遇到這個問題Object.assign。有趣的是,一切都完美適用於Property Schema Put Method,它基本上與Project 1完全相同。
如果我CONSOLE.LOG一些值在項目的put方法,我得到以下幾點:
console.log(account.projects.id(req.params.project_id));
//original value logs { _id: '1486609836741', foo: 'bar' }
console.log(req.body);
//updated value logs { foo: 'barred', _id: '1486609836741' }
console.log(Object.assign(account.projects.id(req.params.project_id), req.body));
//logs the original value { _id: '1486609836741', foo: 'bar' }
所以,當我登錄的更新,原始值它們具有相同的密鑰,不應對象。分配工作?原始的Obj是否比console.log顯示的更復雜,並且原始的和更新的可能沒有相同的密鑰?
我有點難住,任何幫助將不勝感激。讓我知道是否需要發佈更多我的代碼。謝謝。
我得到更新的對象的同一問題不分配給原account.project {} targetproject –