gpt4 book ai didi

javascript - MongoDB 触发器文件中的代码是 Producing a Customer.findOne() is not a function 错误

转载 作者:行者123 更新时间:2023-12-03 00:09:27 24 4
gpt4 key购买 nike

为了能够比较文档的保存前和保存后版本,我尝试在 pre Hook 中查找文档,然后使用它来查看文档中发生的更改post 保存 Hook 中的 doc。

但由于某种原因,我收到“Customer.findOne() 不是函数”错误。这对我来说没有任何意义,因为我已将模型导入到此触发器文件中,然后在我的函数中执行以下操作:

const Customer = require("../customer");

// Get a version of the document prior to changes
exports.preSave = async function(doc) {
console.log("preSave firing with doc._id", doc._id); // this ObjectId logs correctly
if (!doc) return;

this.preSaveDoc = await Customer.findOne({ _id: doc._id }).exec();
console.log("this.preSaveDoc: ", this.preSaveDoc);
};

同样,此代码会产生错误:

"Customer.findOne() is not a function"

仅供引用,我的 Customer 模型中的相关代码如下所示:

let Schema = mongoose
.Schema(CustomerSchema, {
timestamps: true
})
.pre("count", function(next) {
next();
})
.pre("save", function(next) {
const doc = this;
trigger.preSave(doc);
next();
})
.post("save", function(doc) {
trigger.postSave(doc);
})
.post("update", function(doc) {
trigger.postSave(doc);
})
.post("findOneAndUpdate", function(doc) {
trigger.postSave(doc);
});

module.exports = mongoose.model("Customer", Schema);

我在这里缺少什么?为什么此代码会在非常标准的 MongoDB 操作上产生此错误?

最佳答案

这个问题已经解决了。

如果您的mongoDb版本是3.6或更高版本,您可以使用change streams

更改流可让您了解文档中的更改内容。后台进程在 mongoDb 中运行,它通知您的代码发生了事件(CREATE、UPDATE、DELETE)并向您传递文档。您可以过滤字段以了解确切的值。

可以引用这个blog

这是一个可以应用变更流的经典用例。比重新发明轮子更好:)

关于javascript - MongoDB 触发器文件中的代码是 Producing a Customer.findOne() is not a function 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54813849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com