如何从游标(集合)中检索n个文档的组



我正在寻找一种方法,在我的模板组中检索集合"Questions"的3个文档,其中包含近50个文档。在模板中显示前3个文档(问题)后,用户应该决定(按下按钮)是要检索接下来的3个文档还是只完成。

我还没有找到把问题从3题增加到3题的方法。这是我的代码:

collections.js:

Questions = new Mongo.Collection("questions");

myapp.js:

var lastQ=0
Template.questions.helpers ({
  getGroupQuestions: function(){
    //Ideally if I only query one time the entire collection, and store in local var
    var listOfQuest = Questions.find({$and: [ {qNumber: {$nin: answeredQ}}, {qNumber:{$gt:lastQ}}]}, {sort:{qNumber:1}}); 
    lastQ = lastQ + 3;
    return {"Obj1":listOfQuest.fetch()[0], "Obj2":listOfQuest.fetch()[1], "Obj3":listOfQuest.fetch()[2]};  //This is not working, the returned object cant be read in template
  }
});

myapp.html:

<template name="questions">
  <h4> Tell us a little about yourself: </h4>
  <form class="js-add-answers" id="add-answers">
    {{#each getGroupQuestions}}
      <label for="{{qNumber}}">{{qDescription}}</label>
      <input type="text" class="form-control" id="{{qNumber}}" placeholder="{{qHints}}"/>
      <p></p>
    {{/each}}
    <button class="btn btn-warning js-join-event">Save and Join</button>
    <button class="btn btn-warning js-load-more">Save and load more Q</button>        
   </form> 
</template>

我从你的问题中看到的,我所能告诉你的是,在获取文档时,你只需要在函数中使用skiplimit。理想情况下,您应该先删除"不安全"one_answers"自动发布"包,并在代码中使用PUB/SUB技术。

以下是您可以用来获得所需结果的代码。

在服务器端,您应该发布带有跳过计数的代码。

PROJECT/server/publish.js

Meteor.publish('getGroupQuestions', function(skipcount){
    return Questions.find(
                          {$and: [ {qNumber : {$nin: answeredQ}},
                                   {sort : {qNumber:1}}
                          },{limit : 3, skip : skipCount}
         });
});

在客户端声明以下代码为会话变量,相应地跳过3条记录;

client/template/myapp.js

 Session.setDefault('skip', 0);
 Deps.autorun(function(){
     Meteor.subscribe('getGroupQuestions', Session.get('skip'));
 });
 Template.questions.events ({
    "submit .load-more" : function() {
        Session.set(Session.get('skip') + 3)
    }
 });

在myapp.html中,您必须进行一个小的更改,并按以下方式命名按钮;

client/template/myapp.html

<button name="load-more" class="btn btn-warning js-load-more">Save and load more Q</button>

流程说明


  1. 最初,当页面加载时,它会根据逻辑为您提供前3个结果
  2. 当用户单击加载更多的按钮时,模板事件被调用,会话被设置为新值"skip"(增加3)
  3. 由于Meteor的重新活动和异步行为,发布容器将通过再次启动相同的查询,但在会话中使用新的跳过计数器,自动更新具有接下来3个问题的集合。页面甚至不会刷新,您将看到新的一组问题

最新更新