在Meteor中使用一个集合的两个数据集

时间:2013-01-25 01:56:58

标签: meteor

问题是我需要两个不同的mongodb集合数据集

//lib/col.js
Photos = new Meteor.Collection("photos");
lastPhotos = function() {
  return Photos.find({},{sort:{created_time:-1},limit:4});
}
locationPhotos = function(location_id_var) 
{
    //**doesn't return data from server, goes to local cache**
    return Photos.find({location_id: location_id_var});
}
//server
Meteor.publish("lastPhoto", function () 
{
   return lastPhoto();
});

Meteor.publish("locationPhoto", function (location_id) 
{
   return locationPhoto(location_id);
});

//client
Meteor.subscribe("lastPhoto");
Meteor.subscribe("locationPhoto",{location_id:Session.get("location_id")});

meteor合并一个集合的两个数据集的主要问题。

在模板中,我有一个集合的两个不同的演示文稿。收集很大(6000份文件),我不能完全发送给客户。

如何在不将所有文件发送给客户的情况下获得一个集合的两组不同文档?

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。您需要将subscribe包裹在autorun中,以便动态更改服务器的publish方法。

我希望这有用:

使用Javascript:

var Photos = new Meteor.Collection("Photos");

if (Meteor.isClient) {

  Template.main.photos = function () {
    return Photos.find({location_id: Session.get("location") });
  };

  Meteor.autorun(function() {
    Meteor.subscribe("photos", Session.get("location"));
  });

  Template.main.events({
    'click button' : function (e) {
        Session.set("location", $(e.target).data("locale"));
    }
  });
}

if (Meteor.isServer) {
  Meteor.publish("photos", function(location_id) {
    return Photos.find({location_id: location_id}, {sort: { created_time: -1 }, limit: 4});
  });
}

HTML:

<body>
  {{> main}}
</body>

<template name="main">
    {{#each photos}}
        {{location_id}} | {{created_time}} | {{name}} <br/>
     {{/each}}

    <hr/>

    <button type="button" data-locale="MSP">MSP</button>
    &nbsp;
    <button type="button" data-locale="SEA">SEA</button>

</template