如何不保存在Mongoose中的某个字段?
我正在通过Mongoose更新logging,但是当我尝试不包含一个字段,通过不包括它在属性对象字段只是被设置为空。
我的模特:
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); });
正如你所看到的“代码”字段被注释掉,为什么字段值被覆盖? 有什么标志我需要设置什么时候
目前还不清楚你想要做什么。 您正在search集合中的每个文档,但只是更新其中的一个,这是您通过_id
find的。 这看起来像是可以在一个函数中完成的,而且您可能会收到一个错误,因为您在返回的模型上调用update
。 看起来你应该这样写:
Demo.update({ _id:req.params.id },{ name: data.demoName, slug: Utils.createSlug(data.demoName), // code: data.demoCode, details: data.demoDetails }, someCallback);
如果您只想更新文档,如果它的demoSlug
matches与您的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
或者你正在找的文件上。