monogoogle populateは、関連表のフィールドに従って並べ替えます.
問題の説明
通常の開発では、関連表の使用が多く、MongoDBでも同様です.
次のようにメニュー表があります. tb_menuinfo:
でも今の問題は、tb_を使うということです.menuinfoの中のmenu_sortフィールドで検索結果を並べ替えて、どうやって操作しますか?
問題が解決する
monogoogleのpopulate文書を読むと、populateメソッドのパラメータは並べ替えフィールドを指定でき、次のように調整されます.コードは以下の通りです.
通常の開発では、関連表の使用が多く、MongoDBでも同様です.
次のようにメニュー表があります. tb_menuinfo:
var MenuSchema = new Schema({
menu_name: String, //
menu_code: {type:String,unique: true}, //
menu_url: String, // URL
menu_sys: String, //
menu_parent: String, //
menu_icon: String, //
menu_sort: Number, //
menu_status: Number // 1: ,2:
}, {
collection: 'tb_menu_info'
});
exports.Menu = mongoose.model('menu', MenuSchema);
キャラクターが一つあります.メニュー関連表tb_.role_menuinfoは以下の通りですvar roleMenuSchema = new Schema({
role_id:{type:Schema.Types.ObjectId,ref:'role'},
menu_id:[{type:Schema.Types.ObjectId,ref:'menu'}]
},{
collection:'tb_role_menu_info'
});
exports.RoleMenu = mongoose.model('roleMenu',roleMenuSchema);
今はキャラクターIDを使って、対応メニューの詳細を調べます.ポプラで下記のように調べられます.function getMenusByRoleId(roleId){
// query
var query = RoleMenuModel.find({});
// ID
query.where('role_id',roleId);
// menu_id menu
query.populate('menu_id');
// ID
query.sort({'menu_id':1});
//
query.exec().then(function(result){
console.log(result);
}).catch(function(err){
console.log(err);
})
}
これは基本的にはクエリー、並べ替えなどのテーブルクエリに対する基本的な需要が実現されていることが分かります.でも今の問題は、tb_を使うということです.menuinfoの中のmenu_sortフィールドで検索結果を並べ替えて、どうやって操作しますか?
問題が解決する
monogoogleのpopulate文書を読むと、populateメソッドのパラメータは並べ替えフィールドを指定でき、次のように調整されます.コードは以下の通りです.
function getMenusByRoleId(roleId){
// query
var query = RoleMenuModel.find({});
// ID
query.where('role_id',roleId);
// menu_id menu
// path: ;options , , menu_sort
query.populate({path:'menu_id',options:{sort:{'menu_sort':1}}});
// ID
query.sort({'menu_id':1});
//
query.exec().then(function(result){
console.log(result);
}).catch(function(err){
console.log(err);
})
}
このようにして、問題は解決されました.