我有一个简单的文件,名称(要求),描述(可选)。在我的模型中,我更新了一个具有有效ID的文档,并且我传递了值为undefined的描述,因为我想从文档中删除此属性。但是,我得到以下错误: message =在路径“description”中输入值为“undefined”的字符串失败,name = CastError,type = string,value = undefined,path = description 。如果用户未提供说明,如何在更新时删除description属性?有可能吗?
由于
/*jslint indent: 2, node: true, nomen: true*/
'use strict';
var Schema = require('mongoose').Schema;
var mongoose = require('mongoose');
var mongooser = require('../../lib/mongooser');
// Schema
var schema = new Schema({
name: {
required: true,
set: mongooser.trimSetter,
trim: true,
type: String,
unique: true
},
description: {
set: mongooser.trimSetter,
trim: true,
type: String
}
});
// Export
module.exports = mongoose.model('Role', schema);
// Role.js
var update = function (model, callback) {
var test = { name: 'Users', description: undefined };
RoleSchema.findByIdAndUpdate(model.id, test, function (error, role) {
callback(error, role);
});
};
答案 0 :(得分:1)
尝试下载到原生驱动程序,如下所示:
var update = function (model, callback) {
RoleSchema.update({_id: model.id}, {$unset: {description: 1 }}, callback);
});
};
答案 1 :(得分:1)
如果某人不想使用本机驱动程序,请参考此答案https://stackoverflow.com/a/54320056/5947136
这里的问题是使用 type 作为架构中的键。
var schema = new Schema({
name: {
required: true,
set: mongooser.trimSetter,
trim: true,
type: String, // <-- This is causing the issue
unique: true
},
description: {
set: mongooser.trimSetter,
trim: true,
type: String // <-- This is causing the issue
}
});
请参考以上答案以获取不需要本机驱动程序的解决方案。