2016-05-05 69 views
1

以我分貝顯示的結果,每一個用戶無論是創建的影片促成了電影兩者。貓鼬:排序 - 具有參數等於[值]第一

我想從某個用戶參與(創建或提供)的數據庫中提取所有文檔。

但我想結果,使得排序:

  1. 電影,他都創造和貢獻露面第一。
  2. 電影,他創造現身第二
  3. 電影,他只參加了演出同比去年。

這裏是我的電影模式:

var movieSchema = mongoose.Schema({ 
    _creator: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, 
    movieName: String, 
    credits: [{ 
     who: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, 
     what: {String} //writer,director,composer, etc. 
    }] 
}); 

這是我的代碼檢索影片列表,但我不知道如何根據我的標準排序。

Movie 
    //find movies that user with id [id] either created or was credited in(participated) 
    .find({$or:[ {'_creator':id}, {'credits.who':id}]}) 
    .exec(function (err,movies) { 

    }) 

你能幫忙嗎?

+0

你應該能夠使用'movies.sort做到這一點(函數(MOVIE1 ,movie2){m1 = 0如果用戶創建movie1 m1 ++如果用戶contrib movie1 m1 ++並且對於movie2與m2相同然後比較m1和m2返回m1 - m2;});'希望它有意義:) – Molda

+0

它有意義,我不確定如何在實踐中實施它。你能否在答案中提供代碼片段? –

回答

0

要排序的電影,你可以使用數組的排序方法是這樣的:

var movies = [ 
    { created: 'user1', contrib: 'user2' }, 
    { created: 'user2', contrib: 'user1' }, 
    { created: 'user1', contrib: 'user1' } 
]; 

var user = 'user1'; 

movies.sort(function(movie1, movie2) { 

    var m1 = 0; 
    if (movie1.created === user) m1 = 2; 
    if (movie1.contrib === user) m1++; 

    var m2 = 0; 
    if (movie2.created === user) m2 = 2; 
    if (movie2.contrib === user) m2++; 

    return m2 - m1; 
}); 

console.log(movies); 

//output> first movies user has created and contributed 
//  then movies user created 
//  then movies user contributed to 
[ { created: 'user1', contrib: 'user1' }, 
    { created: 'user1', contrib: 'user2' }, 
    { created: 'user2', contrib: 'user1' } ] 

我相信上面的代碼是自我解釋

+0

這是自我解釋,這意味着我必須先從我的數據庫中加載所有內容,然後才能對其進行分類。這反過來意味着如果我只想呈現得分最高的10項,我必須全部拉出(可能有數百項),然後才能進行排序。感覺它不會很有效率。我誤解了什麼嗎? –