2017-05-23 6 views
1

検索のクエリパラメータが存在する場合、カスタムMongoose集計クエリが実行されて、顧客の詳細による注文を検索するように設定しました。Feathersjsが結果を上書きしてページングを維持するカスタムクエリ

それは注文を返すという意味では正常に動作しますが、問題は、私は正常になりますページネーションのための結果に属性を失うことである
module.exports = function(hook, next) { 
    if (hook.params.query && hook.params.query.search) { 
    let search = hook.params.query.search; 
    let regEx = new RegExp(".*" + search + ".*", "i"); 
    delete hook.params.query.search; 

    const OrderModel = hook.app.service("orders").Model; 
    OrderModel.aggregate([ 
    { 
    $lookup: { 
     from: "customeraddress", 
     localField: "shipping_address", 
     foreignField: "_id", 
     as: "shipping_address" 
    } 
    }, 
    { 
    $lookup: { 
     from: "customeraddress", 
     localField: "billing_address", 
     foreignField: "_id", 
     as: "billing_address" 
    } 
    }, 
    { 
    $match: { 
     $or: [ 
     { 
      "shipping_address.first_name": regEx 
     }, 
     { 
      "shipping_address.last_name": regEx 
     }, 
     { 
      "shipping_address.email": regEx 
     }, 
     { 
      "billing_address.first_name": regEx 
     }, 
     { 
      "billing_address.last_name": regEx 
     }, 
     { 
      "billing_address.email": regEx 
     } 
     ] 
    } 
    } 
]).then(orders => { 
    hook.result = orders; 
    next(); 
}); 
} else { 
next(); 
} 
}; 

だから私はこのようなカスタムクエリを行うことができますどのように

{ 
    "total": 2453, 
    "limit": 25, 
    "skip": 0, 
    "data": [] 
} 

同じ応答構造を維持しています。これは私が自分でする必要があるか、それを行うための別の方法です。

答えて

1

あなたはそのサービスのためにマングースModelを直接使用しているため、これは予想されます。

サービスfindは、これらの追加情報を生成するメソッドです。あなたに合計を与えるのはcountです。その後、フィルタからのリミットとスキップが行われます。そのため、$ paginateをfalseにすると、合計スキップ、制限なしのデータ配列しか取得できません。

yourservice.find({query: {...,$limit: 0}})を実行したり、集計を行うことができます。thisのような処理が必要です。

あなたはそれを自分で行う必要があります。

関連する問題