使用集合钩子将新文档的 id 添加到现有文档中的数组中
Add id of new document to array in existing document using collection-hooks
我用matb33:collection-hooks
插入到另一个文档后插入文档,是否可以在插入后更新现有文档? 我正在尝试执行以下操作:
- 在数据上下文具有
boxId
_id
的模板Box
中,调用将新文档插入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
};
}
});
集合钩子不知道也不依赖于文档插入/更新的位置(这是集合钩子的要点之一 - 操作来自哪里并不重要,钩子的行为应该始终相同)。
更重要的是,即使是你的 targetAdd 方法也没有 boxId - 你必须把它作为参数之一传递。
因此,在这种情况下,您应该将 boxId 作为参数传递给 targetAdd 方法并修改该方法中的框文档。
仅当收集操作的上下文不重要时,才使用集合挂钩。
你可以将 boxId 传递给方法,然后传递给新记录,之后它将出现在钩子中:
Template.Box.events({
'click .add button': function(e) {
e.preventDefault();
var target = {
...
};
Meteor.call('targetAdd', target, this._id, function(){});
}
});
Meteor.methods({
targetAdd: function(targetAttributes, boxId) {
check(this.userId, String);
check(boxId, String);
check(targetAttributes, {
...
});
var target = _.extend(targetAttributes, {
submitted: new Date(),
boxId: boxId
});
var targetId = Targets.insert(target);
return {
_id: targetId
};
}
});
Targets.after.insert(function () {
var targetId = this._id;
var boxId = this.boxId;
Boxes.update({_id:boxId}, {$addToSet: {targets: targetId}}, function () {
});
});
相关文章:
- 如何判断何时将dom节点添加到文档中
- 如何从 URL 数组向文档添加图像列表
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- PouchDB,如何在已经有附件的文档中添加新附件
- JS触发器值检查在文档加载后添加到页面的元素在加载时更改AND
- 如何以编程方式将内容脚本添加到 iframe 文档
- 是否有 jQuery 事件用于何时将元素添加到文档中
- 使用单个HTML文档添加多个页面
- 在响应之前向文档添加其他字段
- 如何将 html 文档添加到另一个页面中的容器
- 如何使用严格:false模式的mongoose向mongoDB文档添加字段
- 向主干视图中的Cordova事件添加监听器,而不是向所有文档添加
- 传递信息到服务器端的功能在谷歌文档添加
- 在纯JavaScript中为文档添加onmousedown事件
- 在couchdb文档中使用javascript和html向现有文档添加字段的最简单方法
- 用文档添加脚本.Writeln不允许在开发人员工具中调试
- 在将mongodb文档添加到控制器中的数组中遇到麻烦
- 向现有MongoDB文档添加一个字段(在Node.js中使用Mongoose)
- 是否可以在CouchDB验证函数中向文档添加字段?
- 通过模态复选框选择将一个文档添加到另一个文档