2

渡された ID に基づいて単一の要素のみを表示したい。私は流星のサブスクライブとパブリッシュの方法を同じように使用しており、ルーティングには FlowRouter も使用しています。findOne を使用してデータを取得しようとして Id を渡すと、データは返されませんが、find({}) を実行すると、すべてのデータが取得されて表示されます。findOne が機能しない理由がわかりません。

注 : MongoDB が提供するオブジェクト ID(_id) に基づいてレコードを取得しようとしています。

posts = Mongo.collection("allPosts");

<Template name="stdSingleView">
    {{#if Template.subscriptionsReady}}
    {{#with studenthistory}}
    {{id}} - {{name}}
    {{/with}}
    {{else}}
    Loading....
    {{/if}} 
</Template>

Template.stdSingleView.onCreated(function(){
var self = this;
self.autorun(function(){
var Id = FlowRouter.getParam('id');
self.subscribe('singlePost', Id);
});
});

Template.stdSingleView.helpers({
studenthistory: function(){
var id= FlowRouter.getParam('id');
return posts.findOne({_id: id});
}
});

if (Meteor.isServer) {
Meteor.publish("allposts", function() {
return posts.find({});
});

Meteor.publish('singlePost', function(id) {
check(id, String);
return posts.find({_id: id});
});
}

pages.route( '/:id', {
name: 'singleView',
action: function( params ) {
BlazeLayout.render('stdSingleView');
}
});
4

2 に答える 2

2

_id を使用して findOne を実行する場合は、新しい Mongo.ObjectID にラップして渡してください。

このコードを試してください:

  Meteor.publish('singleStudent', function(id) {
    check(id, String);
    return attendanceRegCol.find({"_id": new Mongo.ObjectID(id)});
  });

  Template.studentSingleView.helpers({
    studenthistory: function(){
      var id= FlowRouter.getParam('id');
      return attendanceRegCol.findOne({"_id": new Mongo.ObjectID(id)});
    }
});
于 2016-01-19T12:16:07.773 に答える