特定のMongoose Subdocument SchemaでObject.assign(例:Object.assign({foo:bar1}、{foo:bar2})を使用すると、foo: BAR2のobjがfooの上書きしません:。BAR1のOBJをObject.assign()Mongoose SubDocument Schemaに関する問題
を私のアプリでは私は2つのサブ文書スキーマでアカウントのスキーマを持って、&プロパティを投写することが、私は問題が発生したプロジェクトのサブ文書スキーマにあります
。ここは私のモデルです:ここでは
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'});
})
})
});
だから、それは私に問題を与えているPUTメソッドだ、私は、ポストを取得問題なく削除しますが、私はこのObject.assign問題が発生した場所のプロジェクトのために入れ部分があることができます。面白いのは、Property Schema Put Methodのすべてが完璧に機能し、基本的にProject 1と全く同じことです。私はプロジェクトのputメソッドで値の一部をCONSOLE.LOG場合
私は次の取得:私は更新され、元の値を記録するとき
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} –