如何不保存在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集合中的每个文档,但只是更新其中的一个,这是您通过_idfind的。 这看起来像是可以在一个函数中完成的,而且您可能会收到一个错误,因为您在返回的模型上调用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); 

如果这仍然不能解决你的问题,希望它可以帮助你更清楚地解释你到底在找什么。

编辑:

另一种方法是使用findOnesave 。 尝试这个:

 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或者你正在找的文件上。