[英]Mongoose Pre and Post hook: stopping a query from execution
我正在為應用程序進行版本控制更改。 我正在使用 mongoose pre-hook 在根據版本控制要求進行處理之前更改查詢,我遇到了一種情況,我需要進行單獨的查詢以檢查其他文檔是否存在,如果存在,我不必須執行當前查詢,如下所示,
schema.pre('find', { document: false, query: true }, async function (next) {
const query = this.getQuery();
const doc = await model.find(query).exec();
if (!doc) {
const liveVersion = { ...query, version: "default" };
this.setQuery(liveVersion);
} else {
return doc;
}
});
在上面找到預掛鈎,我正在嘗試
這里的問題是this.setQuery
都會執行 set 查詢,並且它返回的結果也是我為this.setQuery
獲得的this.setQuery
,而不是其他數據庫查詢結果( doc
)。
有沒有辦法在 mongoose pre-hook 中停止默認查詢執行?
任何幫助將不勝感激。
停止執行后續操作的唯一方法是拋出錯誤,因此您可以在else
拋出特定錯誤,並將數據放在錯誤對象的屬性中,例如:
else {
let err = new Error();
err.message = "not_an_error";
err.data = doc;
}
但這意味着用 try/catch 包裝所有 find 調用,並在 catch 中以提取數據的方式處理此特定錯誤,或者拋出主要錯誤,檢查它是否是實際錯誤。 最后,您將擁有非常丑陋的代碼和邏輯。
這是專門針對您詢問的方式,但通常您可以定義另一種方法,例如findWithCheck()
,並在此自定義方法中檢查上面的 pre 鈎子。
當然,您也可以嘗試覆蓋實際的find()
,但這會有點過分,在這種情況下,這意味着更多地為了測試目的而不是開發目的而破壞整個事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.