我是第一次向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);
任何帮助表示赞赏。
答案 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()才能获得可用数据。例如,登录后不会立即生效。