如何在Mongoose中保存某个字段?

时间:2013-12-17 21:14:13

标签: node.js mongodb mongoose

我正在通过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);
    });

如您所见,“代码”字段已被注释掉,为什么字段值被覆盖?

时是否需要设置任何标志

1 个答案:

答案 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);

如果这仍然无法解决您的问题,希望它可以帮助您更清楚地解释您正在寻找的是什么。

编辑:

另一种方法是使用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或您正在找到的文档中。