Mongodb Meteor Mongo findOne在方法中返回未定义的

Mongodb Meteor Mongo findOne在方法中返回未定义的,mongodb,meteor,Mongodb,Meteor,此方法由附加到帖子的助手调用。出于某种原因,即使用户确实在集合中,我也会得到TypeError:调用方法时无法从方法中读取未定义的属性“profile”。怎么回事 userImage: function(user) { var userObject = Meteor.users.findOne({ "username": user }, { profile: { image: 1 } }); return userObject.profile.image; } 外围问题,我可以

此方法由附加到帖子的助手调用。出于某种原因,即使用户确实在集合中,我也会得到
TypeError:调用方法时无法从方法中读取未定义的属性“profile”。怎么回事

userImage: function(user) {
    var userObject = Meteor.users.findOne({ "username": user }, { profile: { image: 1 } });
    return userObject.profile.image;
}
外围问题,我可以像这样在助手中调用一个方法,并让它直接返回到模板中的助手吗

userImage: function() {
    var user = this.username;

    Meteor.call('userImage', user, function(error,id) {
        if (error) {
            return console.log(error.reason);
        }
    });
}
我想你的意思是:

Meteor.users.findOne({username: user}, {fields: {'profile.image': 1}});
您可能应该在后面添加一个,如:

if(userObject && userObject.profile)
  return userObject.profile.image;

有关如何从助手中调用方法的信息,请参阅。

我整理了Mongo语法,但userObject未定义。你还有别的想法吗?也许我是从错误的角度出发的。我真的只是想写一个助手,它将检索用户的profile.image以显示在帖子中,但它似乎是Meteor.users不允许我访问配置文件,除非用户登录。只是澄清一点,当你说“用户肯定在收藏中”你的意思是用户肯定已经发布到你的客户端集合了吗?好吧,我已经把它复杂化了。我已经发布了配置文件数据并在客户端订阅了它。现在,整个查找可以放在一个三行助手中:
var userObject=Meteor.users.findOne({username:this.username})
然后
返回userObject.profile.image。是的,看起来正确。请确保不要发布太多关于您的用户的数据-请参阅“已发布的机密”部分。可能重复的