我正在尝试查找和更新没有end_date
字段的文档。这是密码
export const updatePlayData = async (gameId, updatedPlayDataKey, updatedPlayData) => {
try {
const query = {
_id: gameId,
end_date: {"$exists": false}
};
console.log(query);
const update = {
$set: Object.keys(updatedPlayData).reduce((accumulator, key) => {
accumulator[`play_data.${updatedPlayDataKey}.${key}`] = updatedPlayData[key];
return accumulator;
}, {})
};
const doc = await GameData.findOneAndUpdate(query, update, { upsert: true, new: true });
if (doc === null) {
return { type: "failure", message: doc._id + " could not be updated." };
} else {
return { type: "success", message: doc._id + " Game Instance has been updated." };
}
} catch (err) {
logger.error(err.name + ": " + err.message);
return { type: "error", message: "Internal Server Error. Contact administrator." }
}
};
这就是我得到的错误:CastError: Cast to date failed for value "{ '$exists': false }" (type Object) at path "end_date" for model "gameData"
。
查询没有被修改,所以我确信这不是查询的问题。如果我删除end_date
检查,更新将正确发生。
任何帮助将不胜感激。
曲名:The Schema
const gameDataSchema = mongoose.Schema({
project_id: {
type: String,
required: true
},
platform: {
type: String,
required: true
},
display_size: {
type: String,
required: true
},
country: {
type: String,
required: true
},
total_play_time: {
type: Number
},
start_date: {
type: Date,
default: Date.now
},
end_date: {
type: Date
},
sessions: {
type: Number,
default: 0
},
sessions_length: [
],
multiple_ids: {
type: Boolean,
default: false
},
filled_form: {
type: Boolean,
default: false
},
ending: {
type: String
},
form_data: {
overall: {
type: Number,
min: 0
},
ease: {
type: Number,
min: 0
},
gameplay: {
type: Number,
min: 0
},
story: {
type: Number,
min: 0
},
graphics: {
type: Number,
min: 0
},
sound: {
type: Number,
min: 0
},
email: {
type: String
},
extra_questions: {
type: mongoose.Schema.Types.Mixed
}
},
relationship_data: {
type: mongoose.Schema.Types.Mixed
},
choice_data: {
type: mongoose.Schema.Types.Mixed
},
play_data: {
type: mongoose.Schema.Types.Mixed
},
end_data: {
type: mongoose.Schema.Types.Mixed
}
});
1条答案
按热度按时间vwkv1x7d1#
sanitizeFiler
设置为true。mongoose.set('sanitizeFilter', true);
使用
mongoose.trusted
修复了它。