Sorteerimine

Praegu näidatakse kõiki andmebaasi kirjeid ja selles järjekorras nagu neid lisati.

Lisan App.js konteinerisse find meetodile piirangu 1 kirje näitamiseks:

export default createContainer(() =>{
  let itemsSub = Meteor.subscribe('allItems');
  return {
    ready: itemsSub.ready(),
    items: Items.find({},{
      limit: 1
    }).fetch()
  }
},App);

Eesmärk on et kõik hääletatavad kirjed ei oleks korraga ekraanil vaid ainult need, mis on veel hääletamata, selleks tuleks need ka sorteerida.

Lisan uue muutuja kuupäeva salvestamiseks:

let date= new Date();

ja kasutan seda hääle lisamise/uuendamise funktsioonis:

Items.update(item._id, {
            $inc: {
              'asiYks.value': 1
            },
            $set: {
              lastUpdated: date
            }
          })

Items.js:

import { Mongo } from 'meteor/mongo';
const Items = new Mongo.Collection('items');
if (Meteor.isServer) {
  Meteor.publish('allItems',function() {
    return Items.find();
  });

    Meteor.methods({
      insertNewItem(asiYks,asiKaks) {
        check(asiYks,String);
        check(asiKaks,String);
        Items.insert({
          asiYks: {
            text:asiYks,
            value: 0,
          },
          asiKaks: {
            text:asiKaks,
            value: 0,
          }
        });
      },
      voteOnItem(item,position){
        let lastUpdated= new Date();
        if(position == 'asiYks') {
          Items.update(item._id, {
            $inc: {
              'asiYks.value': 1
            },
            $set: {
              lastUpdated: lastUpdated
            }
          })
        } else {
          Items.update(item._id, {
            $inc: {
              'asiKaks.value': 1
            },
            $set: {
              lastUpdated: lastUpdated
            }
          })
        }

        }

      });
}
export default Items;

Veel lisan App.js konteinerisse sorteerimise:

//Wrapper  andmete lisamiseks klassile App
export default createContainer(() =>{
  let itemsSub = Meteor.subscribe('allItems');
  return {
    ready: itemsSub.ready(),
    items: Items.find({},{
      limit: 1,
      sort: { lastUpdated: 1} //sorteeritakse välja lastUpdated järgi
    }).fetch()
  }
},App);

Kui andmeid on rohkem siis võib ka serveri pool publish funktsioonis filtreerida ja sorteerida andmeid,

Items.js:

  Meteor.publish('allItems',function() {
    return Items.find({},{
      limit: 1,
      sort: { lastUpdated: 1}
    });
  });

Last updated