0

問題は、1つのmongodbコレクションの2つの異なるデータセットが必要なことです

//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が1つのコレクションの2つのデータセットをマージする主な問題。

テンプレートには、1つのコレクションの2つの異なるプレゼンテーションがあります。コレクションが大きく(6000ドキュメント)、クライアントに完全に送信することはできません。

すべてのドキュメントをクライアントに送信せずに、1つのコレクションの2つの異なるドキュメントセットを取得するにはどうすればよいですか?

4

1 に答える 1

1

あなたは正しい方向に進んでいます。サーバーのメソッドを動的に変更subscribeするには、をラップする必要があります。autorunpublish

これがお役に立てば幸いです。

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
于 2013-01-25T03:06:07.790 に答える