2016-12-15 11 views
0

私はmongoose-paginateを使用して、参照から取り込まれたフィールドでソートされたレコードのリストを取得しています。 マングース - ページネーション - 移入されたフィールドによるソート

// models 
 

 
const Company = new Schema({ 
 
    name: String, 
 
    type: String 
 
}); 
 

 
const report = new Schema({ 
 
    _company: { 
 
    type: String, 
 
    ref: 'Company' 
 
    }, 
 
    name: String 
 
}); 
 

 
let options = { 
 
    offset: 0, 
 
    limit:10, 
 
    populate: '_company', 
 
    select: 'type _company', 
 
    sort: { '_company.name': 1 }, 
 
    lean: true 
 
}; 
 

 
// paginate. 
 
report.paginate({},options, (err, results) => { 
 
    if(err) { 
 
    console.log(err); 
 
    } 
 
    
 
    res.jsonp({ 
 
    data: results 
 
    }); 
 
})

は人口のフィールドであるフィールド_company.name、でソートする方法はあります。

以下のサンプルコードが追加されました。

ありがとうございました。

+1

人口は「物理的に」クエリの後に起こるので、あなたは人口のフィールドにクエリを実行することはできません。母集団はmongoDBではなく、mongooseの機能です。解決策は2つのクエリである可能性があります。 – alfredopacino

答えて

1

Mongoには結合がありません。ポピュレートされたドキュメントを並べ替える唯一の方法は、すべての結果を受け取った後で手動で することです。

質問で定義したスキーマでは、レポートをcomanyスキーマのサブ文書にする必要があります。このような。

const reportSchema = new Schema({ 
    name: String 
}); 


const companySchema = new Schema({ 
    name: String, 
    type: String, 
    reports: [{ 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'Report' 
    }], 

}); 

// we need to create a model to use it 
var Company = mongoose.model('Company', companySchema); 
var Report = mongoose.model('Report', reportSchema); 

レポートをソートしてアンワインドして、それらをすべて一覧表示するユーザー集計。

Comapnay.aggregate([ { 
$match: { <whatever query you want to user> } }, 
{ $sort : { name : 1 } } 
{ $unwind : "$reports" } ]) 
関連する問題