我的模型是:
GigSchema = new Schema({
lastUpdate: {
type: Date,
"default": null
},
type: {
type: String,
"default": null,
"enum": [null, 'mvp', 'code-review', 'extension', 'existent-code-review', 'internal', 'design']
},
meta: {
type: Object,
"default": {
chats: 0,
phoneCalls: 0,
responseTime: null
}
},
engaged: {
type: Date,
"default": null
}
});当我这么做的时候
Gig.findOne({
_id: data.gig
}).populate(populate).exec(function(err, gig) {
gig.meta.chats += 1;
return gig.save(function(err) {
return console.log(err);
});
});我正在尝试更新meta字段,但它实际上并没有保存,但也没有错误。我做错了什么?
发布于 2016-06-16 17:44:17
因此,答案与使用gig.markModified('meta')有关,因为我正在修改对象的属性。
发布于 2016-06-16 16:53:29
应该使用Populate来获取其他集合中对文档的引用。请参阅http://mongoosejs.com/docs/populate.html
如果只想更新文档中的字段,可以执行以下操作:
Gig.findOne({_id: data.gig}, function (err, gig) {
gig.meta.chats += 1;
gig.save(function(err){
console.log(err);
})
})或者您也可以使用Model.findOneAndUpdate
Gig.findOneAndUpdate({_id: data.gig}, { $inc: { meta.chats : 1 }}, {new: true}, function(err, doc){
if (err){
console.log(err);
}
})发布于 2016-06-16 16:51:49
用这个结构..。如果要更新某些内容,而不是保存,则错误捕获和使用update方法会出现问题。
Gig.findOne({
_id: data.gig
}, function(err, gig){
if(err){
throw err;
}else if(gig){
Gig.update({_id: data.gig},{
meta.chats : gig.meta.chats + 1;
},
{
runValidators: true
},
function(err){
if(err) throw err;
}
);});
希望这能帮到你。我在等结果,觉得没事。
https://stackoverflow.com/questions/37864553
复制相似问题