【问题标题】:Meteor - Selecting first two objects in a mongodb collectionMeteor - 选择 mongodb 集合中的前两个对象
【发布时间】:2016-10-06 18:22:23
【问题描述】:

我正在尝试建立一个注册列表,以便人们可以注册、重新排列和删除。这是我遇到的问题;我想从 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>

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    有两种方法可以实现:

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

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

    【讨论】:

      【解决方案2】:

      尝试在您的客户端助手中执行此操作:

      Template.artists.helpers({
        artists() {
          return Artists.find({}, { limit: 2, sort: {order: 1} });
        }
      });
      

      这样,只会从您的 mongodb 集合中检索两个对象。

      【讨论】:

        猜你喜欢
        • 2016-09-16
        • 2020-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 2013-10-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多