javascript - Meteor - 选择 mongodb 集合中的前两个对象

标签 javascript mongodb meteor

我正在尝试构建一个注册列表,以便人们可以注册、重新排列和删除。这是我遇到的问题;我想从 MongoDb 集合中选择前两项(键)。我该如何执行此操作,以便队列中的下两个人显示在新模板中。我知道 find 可能会有所帮助,但我真的不确定我到底在寻找什么。限制 #each 循环中的所有内容是否更容易?

这是我的代码:

服务器端:

Meteor.publish( 'artists', function() {
  return Artists.find( {}, { sort: { order: 1 } } );
});

客户端:

import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';
import { Session } from 'meteor/session'


import './main.html';

var $ = require('jquery');
require('fancybox')($);

let initSortable = ( sortableClass ) => {
  let sortableList = $( sortableClass );
  sortableList.sortable( 'destroy' );
  sortableList.sortable();
  sortableList.sortable().off( 'sortupdate' );
  sortableList.sortable().on( 'sortupdate', () => {
    updateIndexes( '.sortable' );
  });
};

let updateIndexes = ( sortableClass ) => {
  let items = [];

  $( `${sortableClass} li` ).each( ( index, element ) => {
    items.push( { _id: $( element ).data( 'id' ), order: index + 1 } );
  });

  Meteor.call( 'updateArtistOrder', items, ( error ) => {
    if ( error ) {
      console.log( error.reason );
    }
  });
};

Template.artists.onCreated( () => {
  let template = Template.instance();

  template.subscribe( 'artists', () => {
    initSortable( '.sortable' );
  });

});

Template.artists.events({
  'submit #add-artist' ( event, template ) {
    event.preventDefault();

    let artist = {
      artistName: template.find( '[name="artistName"]' ).value
    };

    Meteor.call( 'addArtist', artist, ( error ) => {
      if ( error ) {
        console.log( error );
      } else {
        $( event.target ).get(0).reset();
        $( '[name="artistName"]' ).focus();
        initSortable( '.sortable' );
      }
    });
  },

    'click .delete-artist' ( event, template ) {
    if ( confirm( 'Are you sure? This is permanent!' ) ) {
      Meteor.call( 'deleteArtist', this._id, ( error ) => {
        if ( error ) {
          console.log( error );
        } else {
          updateIndexes( '.sortable' );
        }
      });
    }
  }

});

Template.artists.helpers({
  artists() {
    return Artists.find();
  }
});

集合:

Artists = new Mongo.Collection( 'artists' );

Artists.allow({
  insert() { return false; },
  update() { return false; },
  remove() { return false; }
});

Artists.deny({
  insert() { return true; },
  update() { return true; },
  remove() { return true; }
});

模板:

   <template name="artists">
  <div class="container">
    <h3 class="page-header">Next Up</h3>

    <ul class="list-group sortable">
      {{#each artists}}
        <li data-id="{{_id}}" class="list-group-item clearfix">
          <span class="pull-left">{{order}}. {{artistName}}</span>
          <i class="fa fa-remove pull-right text-danger delete-artist"></i>
        </li>
      {{/each}}
    </ul>

    <form id="add-artist">
      <div class="row">

        <div class="col-xs-12 col-sm-5">
          <label for="artistName">Register Here:</label>
          <input type="text" name="artistName" class="form-control" placeholder="Name">
        </div>
              </div>
        <div class="row">
          <div class="col-xs-12 col-sm-2">
            <button type="submit" class="btn btn-success btn-block">Add Name</button>
          </div>
        </div>

    </form>
  </div>
</template>

最佳答案

有两种方法可以实现此目的:

  1. 对客户端出版物中的数据进行排序,并维护该职位的标记。假设您有 10 个文档,您可以按顺序对它们进行排序并将标记设置为 2(您可以为此使用 session 变量),类似地将下一个模板设置为 4 等等。

  2. 使用这个package 。该软件包允许您订阅带有分页的出版物。这里你可以将文档限制为2个,并相应地使用docs中提到的功能。来实现这一目标。

关于javascript - Meteor - 选择 mongodb 集合中的前两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39886407/

相关文章:

javascript - 带有 React 的 Rabbit-MQ

javascript - 使用angularjs为多选下拉列表分配默认值

javascript - insertMany 总是返回重复的 _id 错误

javascript - jquery - 在添加内容时转义引号问题

JavaScript 像 jQuery 一样使用 prevAll?

javascript - 如何解决 Mongoose 对象保存问题?

javascript - 在 MongoDb 中使用 mapReduce 获取文档(行)计数

javascript - meteor .js : time-based server calls?

meteor - 如何将命令行参数传递给 Meteor 应用程序?

mongodb - 如何在 Meteor 应用程序之间共享 MongoDB 集合?