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 的 DDP 在同步非常大的集合方面的效率如何?
Meteor:Minimongo 不与 MongoDB 同步