Mongoose调用find方法报错TypeError: event.find is not a function求助
问题根因
find()是Mongoose模型的静态方法,只能直接通过你导出的EventModel调用,不能在模型的实例对象上调用。你在查询函数里先执行了const event = new EventModel()创建了模型实例,这个实例上只有save()这类实例方法,没有find静态方法,因此触发类型错误。
你写的新增函数逻辑符合规范:save()是模型实例方法,因此new实例后调用save可以正常执行。
修正后的查询函数代码
exports.findSimilarEvents = async function(eventData, eventLoggedFrom) { // 直接用模型调用find静态方法,不需要创建实例 let similarEvents = await EventModel.find({ eventData: eventData }); // 原循环条件是赋值操作=,会导致死循环,修改为小于判断< for (var i = 0; i < similarEvents.length; i++) { console.log("found similar event"); console.log(similarEvents[i]); } }
额外优化建议
你当前的Schema定义里,日期类型的默认值写的是Date.now(),会在服务启动时就执行一次,所有新建文档的对应字段都会存服务启动的时间,不符合存文档创建/更新时间的需求,建议修改为:
const eventSchema = new mongoose.Schema({ // 去掉Date.now的括号,传入函数本身,新建文档时才会执行获取当前时间 eventTime: { type: Date, default: Date.now }, eventLoggedFrom: String, eventData: Object, eventID: String, ticketID: { type: String, default: "" }, ticketStatus: { type: String, default: "" }, eventLastUpdated: { type: Date, default: Date.now }, })
内容的提问来源于stack exchange,提问作者andeke07
相关产品推荐
相关产品推荐

