2016-06-10 2 views
0

Приветствую вас, я пишу веб-сервис, используя паруса js. Я получаю все сообщения и получаю следующий ответ:Как сортировать записи с помощью ключа объекта в парусах js

[ 
    { 
    id: "559458c51ccc9c716dabf666", 
    comments : [], 
    liked : { 
     data : [ 
      { 
       id: "559458c51eee9c716dabf666", 
       username : "abc" 
      }, 
      { 
       id: "559458c51eee9c716dabf111", 
       username : "xyz" 
      } 
     ], 
     count : 2 
    } 
    }, 

    { 
    id: "559458c51ccc9c716dabf666", 
    comments : [], 
    liked : { 
     data : [ 
      { 
       id: "559458c51eee9c716dabf666", 
       username : "abc" 
      }, 
      { 
       id: "559458c51eee9c716dabf666", 
       username : "pqr" 
      }, 
      { 
       id: "559458c51eee9c716dabf111", 
       username : "xyz" 
      } 
     ], 
     count : 3 
    } 
    } 
] 

Я хочу отсортировать вышеуказанные записи, используя количество понравившихся сообщений. В вышеприведенном ответе нам очень нравится считать liked { data : [], count : 2}.

Я делаю так:

getPost: function(callback) { 
     Posts.find().sort('liked.count desc').populateAll().exec(function (err, posts) { 
      if(err) { 
       return callback({error:err, code:500}); 
      } 
      if (posts) { 
       callback(null,posts); 
      } 

     }); 
    } 

Что делать, чтобы сортировать сообщения с помощью count, который находится в liked : {}

+0

Я пробовал 'sort ('loved.count desc')', но не знаю, почему его не работает. Пожалуйста помоги –

ответ

0

Я удалил sort('liked.count desc') от getPost.

getPost: function(callback) { 
     Posts.find().populateAll().exec(function (err, posts) { 
      if(err) { 
       return callback({error:err, code:500}); 
      } 
      if (posts) { 
       callback(null,posts); 
      } 

    }); 
} 

И В контроллере я звоню выше getPost, как показано ниже:

getTopTip : function (req,res) { 
     Posts.getPost(function (err,tips) { 
      if(err) { 
       return res.notFound(); 
      } 

      // console.log(tips); 
      res.json({'count':tips.length, 'data':tips}); 

     }); 
    } 

Я проверил реакцию с помощью console.log и я получаю ответ, как показано ниже:

[ 
    { 
    id: "559458c51ccc9c716dabf666", 
    comments : [], 
    likes : [ 
      { 
       id: "559458c51eee9c716dabf666", 
       username : "abc" 
      }, 
      { 
       id: "559458c51eee9c716dabf111", 
       username : "xyz" 
      } 
     ] 
    }, 

    { 
    id: "559458c51ccc9c716dabf666", 
    comments : [], 
    likes : [ 
      { 
       id: "559458c51eee9c716dabf666", 
       username : "abc" 
      }, 
      { 
       id: "559458c51eee9c716dabf666", 
       username : "pqr" 
      }, 
      { 
       id: "559458c51eee9c716dabf111", 
       username : "xyz" 
      } 
     ] 
    } 
] 

я пишу сортировка в том контроллере, где я звоню getPost. Эта функция выглядеть следующим образом:

function sortByKey(array, key) { 
    return array.sort(function(a, b) { 
     var x = a[key]; var y = b[key]; 
     return ((x > y) ? -1 : ((x < y) ? 1 : 0)); 
    }); 
} 

И В getTopTip я назвал такого рода функции, как показано ниже:

getTopTip : function (req,res) { 
     Posts.getPost(function (err,tips) { 
      if(err) { 
       return res.notFound(); 
      } 
      if(tips) { 
       tips = sortByKey(tips, 'likes') 
       res.json({'count':tips.length, 'data':tips}); 
      } 
     }); 
    } 

И это работает. У меня есть Сообщения в порядке убывания.

Смежные вопросы