Итак, когда я использую Object.assign (например, Object.assign ({foo: bar1}, {foo: bar2}) на конкретной схеме субдокумента Mongoose, foo: bar2 OBJ не будет перезаписывать Foo:. планкой1 OBJObject.assign() Проблемы на схеме SubDocument Mongoose
в моем приложении у меня есть схемы счета с двумя схемами поддокументу, Проекты & Свойства Это в схеме суб документа проекта, что я сталкиваюсь вопрос
..Вот мои модели:
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 метод, который дает мне вопрос, я могу получить, сообщение, удалить без каких-либо проблем, но Put часть для проектов, где я встречаю этот Object.assign вопрос. Смешно, что все отлично работает для метода Put Schema Method, и в основном это то же самое, что и Project Project.
Если я 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} –