【发布时间】:2017-09-18 10:20:00
【问题描述】:
我有一个如下的 mongo 架构
var schema = mongoose.Schema({
user: {type:ObjectId, ref: 'User'},
preferences: mongoose.Schema.Types.Mixed
});
module.exports = mongoose.model('UserPreference', schema);
我正在用数据拨打电话
{
"newQuestionPrompt": false,
"oldQuestion": false
}
这些属性中的每一个都需要设置到首选项字段中,例如
"_id" : ObjectId("58f9d06cf998d9baccf8024f"),
"user" : ObjectId("58eda68601dc391e27f3e2c4"),
"preferences":{
"newQuestionPrompt": false,
"oldQuestion": false
}
但是,当再次为同一个用户进行相同的帖子调用时,调用中可能存在完全不同的属性,或者具有不同值的相同属性,例如
{
"newQuestionPrompt": true,
"randomQuestion": false
}
在这种情况下,我需要更新已经存在的属性的值并添加不存在的属性,所以早期的对象应该变成
"_id" : ObjectId("58f9d06cf998d9baccf8024f"),
"user" : ObjectId("58eda68601dc391e27f3e2c4"),
"preferences":{
"newQuestionPrompt": true,
"oldQuestion": false,
"randomQuestion": false
}
我不能使用 $set preferences:req.body ,因为它会覆盖整个内容。实现这一目标的最佳方法是什么?
【问题讨论】:
-
设置 Object.assign(oldobjfromdatabase,newobjfromuser)
-
试试:
"_id" : ObjectId("58f9d06cf998d9baccf8024f"), "user" : ObjectId("58eda68601dc391e27f3e2c4"), "$set":{ "preferences.newQuestionPrompt": false } -
如果您使用
preferences.newQuestionPrompt,则只会设置newQuestionPrompt属性,而不会删除其他属性。换句话说preferences.newQuestionPrompt只会更新newQuestionPrompt而不是整个preferences对象。
标签: javascript node.js mongodb object mongoose