gpt4 book ai didi

mongodb - 订阅 Meteor.Users 集合

转载 作者:IT老高 更新时间:2023-10-28 13:14:58 26 4
gpt4 key购买 nike

// in server.js
Meteor.publish("directory", function () {
return Meteor.users.find({}, {fields: {emails: 1, profile: 1}});
});

// in client.js
Meteor.subscribe("directory");

我现在想从浏览器控制台获取从客户端查询的目录列表,例如 directory.findOne()。//测试目的

执行 directory=Meteor.subscribe('directory')/directory=Meteor.Collection('directory') 并执行 directory.findOne() 不起作用,但是当我执行 directory=new Meteor.Collection('directory') 时,它会起作用并返回 undefined,我敢打赌它会在服务器上创建一个我没有的 mongo 集合喜欢,因为 USER 集合已经存在并且它指向一个新的集合而不是 USER 集合。

注意:我不想弄乱 Meteor.users 集合如何处理其功能...我只想使用不同的句柄从中检索一些特定数据,该句柄只会返回指定的字段而不是覆盖其默认值函数...

例如:

Meteor.users.findOne() // will return the currentLoggedIn users data
directory.findOne() // will return different fields taken from Meteor.users collection.

最佳答案

如果您希望此设置正常工作,您需要执行以下操作:

Meteor.publish('thisNameDoesNotMatter', function () {
var self = this;
var handle = Meteor.users.find({}, {
fields: {emails: 1, profile: 1}
}).observeChanges({
added: function (id, fields) {
self.added('thisNameMatters', id, fields);
},
changed: function (id, fields) {
self.changed('thisNameMatters', id, fields);
},
removed: function (id) {
self.removed('thisNameMatters', id);
}
});

self.ready();

self.onStop(function () {
handle.stop();
});

});

不需要在客户端定义一个仅限客户端的集合:

directories = new Meteor.Collection('thisNameMatters');

并订阅对应的数据集:

Meteor.subscribe('thisNameDoesNotMatter');

现在应该可以了。如果您认为这个解释不够清楚,请告诉我。

编辑

这里,self.added/changed/removed 方法或多或少地充当了事件调度器。简而言之,他们会向每个打电话的客户发出指示

Meteor.subscribe('thisNameDoesNotMatter');

关于应该应用于名为 thisNameMatters 的客户端集合的更新,假设此集合存在。名称 - 作为第一个参数传递 - 几乎可以任意选择,但如果客户端没有相应的集合,则所有更新都将被忽略。请注意,此集合只能是客户端的,因此它不一定必须对应于数据库中的“真实”集合。

从您的 publish 方法返回一个光标,它只是上述代码的快捷方式,唯一的区别是使用实际集合的名称而不是我们的 theNameMatters .这种机制实际上允许您创建任意数量的数据集“镜像”。在某些情况下,这可能非常有用。唯一的问题是这些“集合”将是只读的(顺便说一句,这完全有意义),因为如果它们没有在服务器上定义,则相应的 `insert/update/remove' 方法不存在。

关于mongodb - 订阅 Meteor.Users 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25198683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com