2016-06-10 1 views
0

Bonjour mes amis J'écris le service web en utilisant voiles js. Je suis aller chercher tous les postes et obtenir la réponse suivante:Comment trier les enregistrements en utilisant la clé de l'objet dans les voiles 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 
    } 
    } 
] 

Je veux trier ci-dessus enregistrements à l'aide du nombre de messages aimé. Dans la réponse ci-dessus, nous sommes aimés comptent comme liked { data : [], count : 2}.

Je suis en train de faire comme ceci:

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); 
      } 

     }); 
    } 

Que faire pour trier les messages en utilisant le count qui est dans le liked : {}

+0

J'ai essayé 'sort ('liked.count desc')' mais je ne sais pas pourquoi cela ne fonctionne pas. S'il vous plaît aider –

Répondre

0

J'ai enlevé sort('liked.count desc') de getPost.

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

    }); 
} 

Et dans le contrôleur que j'appelle ci-dessus getPost comme ci-dessous:

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

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

     }); 
    } 

J'ai vérifié réponse à l'aide console.log et j'obtiens une réponse comme ci-dessous:

[ 
    { 
    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" 
      } 
     ] 
    } 
] 

J'écris trier la fonction dans ce contrôleur où j'appelle getPost. Ce regard de la fonction comme ci-dessous:

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)); 
    }); 
} 

Et En getTopTip j'ai appelé cette fonction de tri comme ci-dessous:

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}); 
      } 
     }); 
    } 

Et ça marche. J'ai des messages dans l'ordre décroissant.