Meteor publish undefined or Publish function can only return a Cursor or an array of Cursors

Having some wired issues with my Meteor publish when I have findOne it works but with find it does not and with findOne I get a cursor error.

Here is my code

Meteor.publish('organizations', function() {
    var user = Meteor.users.findOne(this.userId);
    if(!user) return '';
     var debugTest = Organizations.findOne(user.organizationId);
      console.log(debugTest._id);
    //return Organizations.findOne({_id: user.organizationId});
}); 

For this I get undefined

If I do the following

Meteor.publish('organizations', function() {
  var user = Meteor.users.findOne(this.userId);
  if(!user) return '';
  console.log(user.organizationId);
  var debugTest = Organizations.findOne(user.organizationId);
  console.log(debugTest._id);
  //return Organizations.findOne({_id: user.organizationId});
});

I get back both ID's but with the return I get the following error

Teh I NvoF9MimZ6tJ95c3m NvoF9MimZ6tJ95c3m

The error Exception from sub KLnQphHTXmQcjEi2D Error: Publish function can only return a Cursor or an array of Cursors

Answers:

Answer

findOne does not return a Mongo cursor. It returns a Mongo document. If you want this to work, try changing to using return Organizations.find({_id: user.organizationId}); instead. That will return a single document cursor which is what the publish call expects.

For more info check out the docs.

Answer

So the issue was due to my template the pub/sub was working fine but in my template helper I had the following which was causing the issue.

hasOrganization: function() {
    var user = Meteor.user();
    var organizationsCount = Organizations.find({$or:[{userId: user._id},{**userId**: user.organizationId}]}).count();
    console.log(organizationsCount);

    if (organizationsCount >= 1) {
      return true
    } else {
      return false
    }

Here is the fixed version

hasOrganization: function() {
    var organizationsCount = Organizations.find().count();
    if (organizationsCount >= 1) {
      return true
    } else {
      return false
    }
  }

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.