我在插入文档后使用matb33:collection-hooks
插入文档,是否可以在插入后更新现有文档?我试图做以下事情:
Box
中,其数据上下文的_id
为boxId
,调用方法将新文档插入Targets
集合_id
,并将其添加到_id
boxId
的文档数组中。由于this
引用了新文档,我无法弄清楚如何让boxId
更新正确的文档。
每张Pawel的最终代码答案:
Template.Box.events({
'click .add button': function(e) {
e.preventDefault();
var currentBoxId = this._id;
var target = {
...
};
Meteor.call('targetAdd', target, currentBoxId, function(){});
}
});
Meteor.methods({
targetAdd: function(targetAttributes, currentBoxId) {
check(this.userId, String);
check(currentBoxId, String);
check(targetAttributes, {
...
});
var target = _.extend(targetAttributes, {
userId: user._id,
submitted: new Date()
});
var targetId = Targets.insert(target);
Boxes.update(currentBoxId, {$addToSet: {targets:targetId}});
return {
_id: targetId
};
}
});
答案 0 :(得分:0)
集合钩子不知道并且不依赖于文档的插入/更新位置(这是集合钩子的一个点 - 操作来自哪里无关紧要,钩子应该总是表现出来同样的方式)。
更重要的是,即使你的targetAdd方法也没有boxId - 你必须将它作为参数之一传递。
因此,在这种情况下,您应该将boxId作为参数传递给targetAdd方法,并修改方法中的box文档。
仅在集合操作的上下文不重要的情况下使用集合挂钩。
答案 1 :(得分:0)
您可以将boxId传递给方法,然后传递给新记录,之后它将显示在钩子中:
public class AppContainer : IAppContainer
{
private readonly ContainerBuilder _builder ;
private IContainer _container ;
public AppContainer ()
{
_builder = new ContainerBuilder();
_builder.RegisterAssemblyModules(_assembly);
_container = _builder.Build();
}
public ContainerBuilder ContainerBuilder
{
get { return _builder; }
}
public IContainer Container
{
get { return _container;}
}
}