我有一個像這樣的復雜查詢:
VERSION1
export async function mPass(){
return await MyModel.aggregate()
.addField({$match: {//condition}})
.lookup(//lookup query)
.addField({$cond: {//condition}})
.addField(//condition2) #<---------PAGINATE DATA HERE
.addField({$match: {//condition}})
}
現在,對于相同的查詢,我需要對結果進行分頁,但是,我要在condition2上面之后對資料進行分頁
所以,上面的函式會變成這樣:
VERSION2
export async function mPass(pageNumber, pageSize){
return await MyModel.aggregate()
.addField({$match: {//condition}})
.lookup(//lookup query)
.addField({$cond: {//condition}})
.addField(//condition2) # <---------PAGINATE DATA HERE
.skip((pageNumber-1)*pageSize)
.limit(pageSize)
.addField({$match: {//condition}})
}
問題是,我已經在多個不需要分頁的地方使用了該功能。所以,我在想有這樣的事情:
.skip(-1).limit(-1)
這不會做任何跳過或限制,但是,轉向檔案,它說它們都只取正值。
那么,我將如何對函式進行引數化以選擇性地在指定位置的查詢中包含分頁?
uj5u.com熱心網友回復:
使用if陳述句:
export async function mPass(pageNumber = null, pageSize = null){
let ag = MyModel.aggregate()
.addField({$match: {//condition}})
.lookup(//lookup query)
.addField({$cond: {//condition}})
.addField(//condition2) # <---------PAGINATE DATA HERE
if (pageSize) {
ag.skip((pageNumber-1)*pageSize)
.limit(pageSize)
}
return ag.addField({$match: {//condition}})
}
附帶說明一下,分頁后的 $match 是一種有問題的做法。您最終可能會得到一個包含小于 pageSize 檔案的頁面,甚至根本沒有檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/490193.html
下一篇:MongoDB將架構顯示為未定義
