2016-03-28 12 views
0

は私が与えられた距離以内に「鮫」を見つけて、それをクライアントに公開しようとしている流星で凝集をやってる:追加されたフィールドがクライアントに公開されていませんか?

Meteor.publish("thingieSearch", function(userId) { 
    check(userId, String); 
    var subscription = this; 
    var thingies = {}; 
    var userId = this.userId; 
    var usrAcc = Meteor.users.findOne({_id: userId}); 
    var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db; 
    var pipeline = [{ 
    $geoNear: { 
     near: usrAcc.profile.location.geometry.coordinates, 
     distanceField: "calculatedDistance", 
     spherical: true, 
     limit: 100, 
     distanceMultiplier: 3959.2, 
     maxDistance: 0.075, 
     query: { 
     "status": "started", 
     "owner": {$ne: userId} }, 
    } 
    }]; 
    db.collection("thingies").aggregate(
    pipeline, 
    Meteor.bindEnvironment(
     function (err, result) { 
     console.log('result', result); 
     _.each(result, function (r) { 
      chases[r._id] = r; 
      subscription.added("thingieSearch", r._id, { 
      chase: r 
      }); 
     }) 
     } 
    ) 
); 
    subscription.ready(); 
}); 

私は、サーバー側ではconsole.logを行い、それは正しいと思われる、私が 'calculatedDistance'として指定された 'distanceField'が計算され、フィールドとして表示されます。

クライアント側では、この出版物を購読していますが、私はその物を見ることができますが、 'calculatedDistance'フィールドは表示されません。

理由は何ですか?

答えて

1

ここには2つのものがあります。

1)mongodbリモートコレクションドライバを使用しているため、パブリケーションはデータをクライアントに反応的に更新しません。それが非反応的であることを意図している場合は、公開の代わりに流星法を使用して、userIdが変更されるたびにメソッドを呼び出すことができます。

2)クライアント側でthingiesコレクションを使用していて、calculatedDistanceフィールドが表示されないと思います。あなたは、コレクションを作成するためにあなたがsubscription.addedブロック内で渡された任意の名前を使用する必要があり

//On client side only 
thingieSearch = new Mongo.Collection("thingieSearch"); 

thingieSearch.findOne(); // After the publication, you should be able to see the results with calculatedDistance 

、このようなカスタム公表された結果にアクセスするためのクライアントのみのコレクション(thingieSearch)を作成する必要があります。たとえば、パブリケーションが

subscription.added("thingieWithCalculateField", r._id, { chase: r }); 

を持っている場合、あなたがやるべき

//On client side only 
thingieWithCalculateField = new Mongo.Collection("thingieWithCalculateField"); 
// instead of thingieSearch = new Mongo.Collection("thingieSearch"); 

は、より多くの詳細については、Meteor.publish documentationcounts-by-room出版物を参照してください。

+0

ありがとう@キシール、私は見てみましょう。 – L4zl0w

+1

それが機能するように管理、ありがとう! – L4zl0w

関連する問題