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

Posted

技术标签:

【中文标题】Meteor - 如何在 MongoDB 集合中查找/获取对象并使用方法将其推送到另一个集合中?【英文标题】:Meteor - How can I find/get an object in a MongoDB collection and push it into another collection with a method? 【发布时间】:2017-06-27 06:48:19 【问题描述】:

我有一个服务器端方法,例如:

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”中。

我有一个click. 事件触发如下方法:

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

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

当我使用“信息”集合中的 ID 手动填充该方法时,该方法的工作方式与预期相同。它将这个 ID 推送到“activeInfos”中,用户现在可以从“Infos”访问这个 objectID。

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

有没有办法做到这一点?

【问题讨论】:

如您所说,如何获取正确的ID? 是的,有点像:Infos.find("_id": ...).fetch[0]._id 函数?说白了就是通过方法推送。 【参考方案1】:

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

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 );
    
  
);

【讨论】:

感谢您的回答。但是我在加载 localhost “unexpected token =>”时收到一个错误。 我猜您在数据上下文中有一个集合,但不知道您使用的是什么键。从您下面的答案看来,您使用 InfoId 来引用该对象。上面的代码已更改。【参考方案2】:

知道了!不过,感谢您的努力!我不知道为什么,但我只需将 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
          
         
      );
    
  
);

【讨论】:

以上是关于Meteor - 如何在 MongoDB 集合中查找/获取对象并使用方法将其推送到另一个集合中?的主要内容,如果未能解决你的问题,请参考以下文章

angular-meteor 根据参数查找 MongoDb 集合并返回

将数据发布到 Meteor 的 MongoDB 集合

Meteor 的 DDP 在同步非常大的集合方面的效率如何?

Meteor:Minimongo 不与 MongoDB 同步

在 Meteor 运行时,如何从另一个客户端访问 Meteor 的 MongoDB?

如何使用mongodb显示我的用户集合