Meteor用户帐户的自定义字段和全局订阅

时间:2016-09-08 20:57:43

标签: mongodb meteor user-accounts

我是第一次向Meteor用户帐户添加自定义数据。我已经能够毫无困难地添加自定义字段了,我知道他们在那里,因为我可以在蒙古看到它们。我是通过全球订阅发布的,那么我该如何从各个领域读取数据呢?看起来语法与使用发布/订阅方法时的语法非常不同。

所以,我有这样的用户帐户(如Mongol所示):

"_id": "#################",
  "profile": {
    "name": "Test User"
  },
  "customfields": {
    "customfield1": [
      "A","B","C"
    ]
  }
}

server/main.js我有以下

Meteor.publish(null, function() {
  return Meteor.users.find(this.userId, {fields:{customfields:1}});
});

这似乎很好。但是我用什么代码将光标渲染为数据?我在client/main.js中使用了类似代码的变体而没有成功:

var stuff = Meteor.users.find(this.userId).fetch();
console.log(stuff.customfield1);

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

由于customfield1嵌套在customfields中,你是否尝试过stuff.customfields.customfield1?

答案 1 :(得分:0)

cat test.json | jq '.logs | * | .type' 返回游标,而MyCollection.find()返回对象,即单个mongodb文档。

发布 必须返回游标游标数组。你的出版物很好。

您基本上是尝试在客户端上显示用户对象的MyCollection.findOne()键。 (customfields密钥由Meteor自动发布。

在客户端,您正在做的事情:

profile

您可以简单地使用:

var stuff = Meteor.users.find(this.userId).fetch();

var stuff = Meteor.user();

然后var stuff = Meteor.users.findOne(Meteor.userId()); 将包含您正在寻找的内容。

除非您正在寻找与登录用户不同的用户,否则第二种形式对我来说过于冗长。

注意:客户端上的stuff.customfields 是当前用户的this.userId,它将未定义。这只适用于服务器。这实际上可能是您问题的根本原因。此外,您的出版物必须 ready()才能获得可用数据。例如,登录后不会立即生效。