我的应用程序不会更新数组中的值(Mongoose)

时间:2017-03-30 10:50:35

标签: javascript node.js mongoose

它将更新除数组中的值之外的所有值,它不会那样做。

这是我的更新

exports.update = function(req, res) {
    if (req.body._id) {
        delete req.body._id;
    }
    plan.findById(req.params.id, function(err, plan) {
        if (err) {
            return handleError(res, err);
        }
        if (!plan) {
            return res.send(404);
        }
        var updated = _.merge(plan, req.body);
        updated.save(function(err) {
            if (err) {
                return handleError(res, err);
            }
            return res.json(200, plan);
        });
    });
};

这是我的架构

var ContactSchema = new Schema({
    location: {
        type: String,
        required: true
    },
    total_cost: {
        type: Number,
        required: true
    },
    detailed_expenses: {
        transport: {
            type: String,
            required: true,
            trim: true
        },
        Hotel: {
            type: Number,
            required: true,
            trim: true
        },
        Food: {
            type: Number,
            required: true,
            trim: true
        },
        Attractions: {
            type: Number,
            required: true,
            trim: true
        }
    },
    holiday_type: {
        type: String,
        required: true
    },
    transport_type: {
        type: String,
        required: true
    },
    updated: {
        type: Date,
        default: Date.now
    }
});

1 个答案:

答案 0 :(得分:1)

var updated = _.merge(plan, req.body);

因为updated是简单对象而不是ContactSchema的实例,因此它不包含save函数。因此,您需要使用ContactSchema创建updated的实例,然后才能使用save函数。以下是您的更新代码。

exports.update = function(req, res) {
if (req.body._id) {
    delete req.body._id;
}
plan.findById(req.params.id, function(err, plan) {
    if (err) {
        return handleError(res, err);
    }
    if (!plan) {
        return res.send(404);
    }
    var updated = new plan(req.body); //if req.body is document to be saved
    updated.save(function(err) {
        if (err) {
            return handleError(res, err);
        }
        return res.json(200, plan);
    });
});

};