Meteor - 如何在MongoDB集合中查找/获取对象并使用方法将其推送到另一个集合中?

时间:2017-02-09 10:06:36

标签: mongodb meteor methods collections push

我真的在努力解决这个问题。所以,我有一个服务器端方法,如:

Meteor.methods({ 
 'pushInfo': function(){
   if (this.userId) {
    userManagement.update({
    '_id': this.userId
    }, {
     $push: {
     'activeInfos': ["The Info/Object I want to push from another collection"]
      }
     }
    );
   }
  }
});

此方法应将对象推送到集合'userManagement'中的字段'activeInfos'。

所以,我点击了一下。触发方法的事件,如:

Template.available.events({
 "click. push": function(e) {
  e.preventDefault();
  Meteor.call('pushInfo');
 }

});

现在,我有另一个名为'Infos'的集合,我希望通过该方法将单个对象/ ID推送到字段'activeInfos'。

当我手动用'Infos'集合中的ID填充它时,该方法的效果与预期的一样。它将此ID推送到“activeInfos”,用户现在可以从“Infos”访问此objectID。

但是,当触发该方法时,它应该自动从'Infos'中找到正确的ID并将其推送到'activeInfos'。

有没有办法做到这一点?我正在尝试几个小时,现在我有点绝望了。会感激任何有帮助的。

感谢。

2 个答案:

答案 0 :(得分:0)

如果您的available模板显示Infos列表,那么您可以在事件处理程序中获取_id对象的Infos并将其传递给方法:

Template.available.events({
  "click. push"(e) {
    e.preventDefault();
    Meteor.call('pushInfo',this.InfoId);
  }
});


Meteor.methods({ 
  'pushInfo'(infoId)=>{
    const info = Infos.findOne(infoId)
    if (this.userId && info) {
      userManagement.update(this.userId, { $push: { activeInfos: info }});
    }
  }
});

答案 1 :(得分:0)

知道了!不过,谢谢你的努力!我不知道为什么,但我只需将this.InfoId分配给var并将InfoId放入事件处理程序中的Meteor.call。我能够将这个var传递给服务器端方法中的函数,然后抓住$ push。

Template.available.events({
"click .push": function(e) {
    e.preventDefault();
    var InfoId = this.InfoId;
    Meteor.call('pushInfo', InfoId);
}, });

 Meteor.methods({
  'pushInfo': function(InfoId) {
    if (this.userId) {
      userManagement.update({
          '_id': this.userId
        }, {
          $push: {
            'activeInfos': infoId
          }
        } 
      );
    }
  }
});