是否应发布MongoDB插入/更新/ Upserts / Deletes?

时间:2015-09-30 15:07:13

标签: javascript mongodb meteor

截至目前,我在\​​ server \ publications.js中有我的MongoDB“Selects”,例如:

Meteor.publish("jobLocations", function () {
  return JobLocations.find();
});

...我订阅了\ client \ main.js中的那些,例如:

Meteor.startup(function() {
  Meteor.subscribe("jobLocations");
 . . .

...但我在\ both \ methods.js中有我的Inserts / Updates / Upserts / Deletes,如下所示:

Meteor.methods({
    'insertJobLocation': function(username, jobLoc, placename, st8OrProvince, postalcode, xcoord, ycoord) {
        JobLocations.insert({
            jl_jobloc: jobLoc,
    . . .

...我正在从\ client \ templates \ whatever.js中调用它们,如下所示:

'submit form': function(event, template) {
    . . .      
    Meteor.call('insertJobLocation', jobloc, placename, st8OrProvince, 
        postalcode, xcoord, ycoord, function(err) {
        . . .

这有效,但是错了[-headed]?

应该所有发布/订阅MongoDB代码(IOW,位于\ server \ publications.js和\ client \ main.js?

1 个答案:

答案 0 :(得分:1)

根据我的阅读,经验法则是订阅您需要在客户端浏览器上显示的内容。
这将返回JobLocations集合中的所有项目/字段,因此,如果此集合很大,您可能希望使用queryfield参数限制您发布的内容:

在:

Meteor.publish("jobLocations", function () {
  return JobLocations.find();
});

一旦获得大量数据(或想要隐藏敏感数据!):

Meteor.publish("jobLocations", function (jobLocParam) {
  var selector = {
    jobLoc: {$in: jobLocParam},
  }
  var options = {
    sort: {placename: 1},
    fields: {jobLoc: 1, placename: 1},
    limit: 20
  }
  return JobLocations.find(selector, options);
});

所有这些字段都是可选的,但我想我会举几个例子。如果您想要返回所有内容,selector可以只是{},您可以使用fields参数(也是可选的)限制发布哪些字段。出版物也可以使用参数,因此如果您愿意,可以在创建模板时通过出版物传递jobLoc或其中的数组。

希望这有帮助!