我正在通过Mongoose更新记录,但是当我尝试不在字段对象中包含字段时,字段只是设置为空。
我的模特:
var demo = new Schema({
name: String,
slug: String,
code: String,
details: String,
scripts: [],
css: [],
status: {
type: String,
default: "draft"
},
lastModifiedDate: {
type: Date,
default: Date.now
},
projectId: Schema.ObjectId
});
我在保存的地方:
Demo.find({ slug: req.params.demoSlug }, function(err,demos){
if(err){
console.log("Error retrieving demo from db");
res.send(500,err);
return;
}
demos[0].update({ _id:req.params.id },{
name: data.demoName,
slug: Utils.createSlug(data.demoName),
// code: data.demoCode,
details: data.demoDetails
}, someCallback);
});
如您所见,“代码”字段已被注释掉,为什么字段值被覆盖?
时是否需要设置任何标志答案 0 :(得分:2)
目前尚不清楚你究竟要做什么。您正在搜索集合中的每个文档,但您只是更新其中一个,您可以通过_id
找到它们。这看起来可以在一个函数中完成,并且您可能会收到错误,因为您在返回的模型上调用update
。看起来你应该这样写:
Demo.update({ _id:req.params.id },{
name: data.demoName,
slug: Utils.createSlug(data.demoName),
// code: data.demoCode,
details: data.demoDetails
}, someCallback);
如果你只想更新文件,如果它的slug与你的demoSlug
和_id
匹配,那么它将如下所示:
Demo.update({ _id: req.params.id, slug: req.params.demoSlug },{
name: data.demoName,
slug: Utils.createSlug(data.demoName),
// code: data.demoCode,
details: data.demoDetails
}, someCallback);
如果这仍然无法解决您的问题,希望它可以帮助您更清楚地解释您正在寻找的是什么。
编辑:
另一种方法是使用findOne
和save
。试试这个:
Demo.findOne({ slug: req.params.demoSlug }, function(err, demo) {
if(err) {
console.log("Error retrieving demo from db");
res.send(500, err);
return;
}
demo.name = data.demoName;
demo.slug = Utils.createSlug(data.demoName);
demo.details = data.demoDetails;
demo.save(callback);
}
这样的事情应该会有所作为。如果这些都不起作用,我怀疑问题出在data
或您正在找到的文档中。