91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mongoose中怎么實現虛擬字段查詢

發布時間:2021-07-20 15:51:27 來源:億速云 閱讀:149 作者:Leah 欄目:web開發

今天就跟大家聊聊有關Mongoose中怎么實現虛擬字段查詢,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Mongoose 中的 Hook

Mongoose Schema幾乎所有靜態方法和對象方法都添加了 .pre和.post鉤子。 這些鉤子其實就是函數鉤子,采用hooks-js的實現。

來自官網的例子:

var hooks = require('hooks')
 , Document = require('./path/to/some/document/constructor');
// Add hooks' methods: `hook`, `pre`, and `post`
for (var k in hooks) {
 Document[k] = hooks[k];
}
// Define a new method that is able to invoke pre and post middleware
Document.hook('save', Document.prototype.save);

// 上述代碼在mongoose中實現
/////////////////////////////////////////////////////////////////////
// 下面的代碼則是mongoose提供的Hook API

// Define a middleware function to be invoked before 'save'
Document.pre('save', function validate(next) {
 // ...
});

Document.save()被調用時,上述validate函數就會被回調。

添加查詢鉤子

Mongoose沒有對hooks-js進一步封裝,這意味著我們不能對所有Query方法設置鉤子, 只能一一枚舉需要監視的方法。當然,這不影響我們進行代碼復用。

// 設置 findOne 和 find 鉤子
CompanySchema.pre('findOne', preFind).pre('find', preFind);

接下來便著手實現preFind函數。

實現虛擬查詢

在鉤子(preFind)中,我們可以更改查詢條件借此實現虛擬查詢。 值得注意的是,完全可控的Query意味著我們可以實現任何形式的虛擬查詢。

 例如全文檢索:

function preFind() {
 var word = this.getQuery().word;
 if(word === undefined) return;

 // 從真實的Query中刪掉虛擬屬性
 delete this._conditions.word;
 // 構造正則表達式
 var regex = new RegExp(word);
 // 全文檢索
 this.where({ $or: [{ title: regex }, { content: regex }, { author: regex }] });
}

看完上述內容,你們對Mongoose中怎么實現虛擬字段查詢有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新宁县| 凤阳县| 吉木乃县| 铜鼓县| 定襄县| 宁明县| 汾阳市| 潢川县| 东丽区| 康保县| 绍兴市| 灌南县| 桐乡市| 南木林县| 榆林市| 富宁县| 温州市| 额敏县| 遵义市| 广水市| 泽普县| 湖南省| 米林县| 高州市| 新乐市| 乌拉特前旗| 洛川县| 祁阳县| 始兴县| 马尔康县| 绩溪县| 商河县| 雷波县| 石门县| 泌阳县| 东辽县| 六安市| 达日县| 郁南县| 墨江| 视频|