Я использую вложенную функцию для вызова двух методов для дублирования набора документов. Документы поступают из двух разных коллекций, но связаны между собой полем treeBranches, как показано ниже.forEach over cursor
коллекция Деревья
{
_id: "tree_1",
treeBranches: ["branch_1","branch_2"],
...
}
Ветви коллекция
{
_id: "branch_1",
branchName: "Branch 1",
...
}
{
_id: "branch_2",
branchName: "Branch 2",
...
}
Я не понимаю, как получить _id
каждого существующего филиала документа в branches.forEach
. Прямо сейчас, когда я запускаю это, создаются несколько документов филиала, но каждый дублирует первую существующую ветвь независимо от того, сколько ее существует. Как я могу отредактировать var currentBranchId = Branches.findOne({})._id;
, чтобы получить это _id
и правильно ли перебрать петлю?
КОД отредактирован Скорпоратировать ОТВЕТ
Template.Actions.events({
'change .action-selection': function(e) {
e.preventDefault();
var selection = $(e.target).val();
var currentTreeId = this._id;
var branches = Branches.find({_id:{$in:this.treeBranches}});
switch(selection) {
case "tree-repeat":
return Meteor.call('treeRepeat', currentTreeId, function() {
branches.forEach(function(b) {
var currentBranchId = b._id;
Meteor.call('treeBranchesRepeat', currentBranchId, function (branchId) {
});
});
});
break;
…
}
}
});
Meteor.methods({
treeRepeat: function(currentTreeId) {
check(currentTreeId, String);
var tree = Trees.findOne({_id:currentTreeId}, {fields:{_id:0, treeBranches:0}});
var treeExtended = _.extend(tree, {
treeBranches: [?]//NEED IDS FROM NEW BRANCHES
});
var treeId = Trees.insert(treeExtended);
return {
_id: treeId
};
},
treeBranchesRepeat: function(currentBranchId) {
check(currentBranchId, String);
var branch = Branches.findOne({_id:currentBranchId}, {fields: {_id: 0}});
var branchId = Branches.insert(branch);
return {
_id: branchId
};
}
});
Спасибо Мишеля, на полпути - вы решили мою первую проблему с '(б)' - Я Бесполезным Я знаю, что могу использовать это, не уточняя, какой именно документ. Что касается вашего вопроса, ветвями, которые принадлежат каждому дереву, являются те, чьи идентификаторы существуют в массиве 'treeBranches'. Используя первую часть вашего решения, я теперь смог создать дублируемую версию дерева и обоих ветвей. Но мне нужно передать _id, созданный для каждой ветви, из внутренней функции во внешнюю функцию, чтобы добавить к treeBranches в новое дерево. Я не могу сделать это во внутренней функции, так как новое дерево не существует. – Bren
Я не верю, что мне нужен второй блок кода, так как 1) Я знаю, какое дерево я дублирую, и 2) Я дублирую все документы в своих существующих коллекциях, но с новыми идентификаторами. – Bren
Спасибо Мишель, я собираюсь опубликовать отдельный вопрос о переходе между функциями, поскольку я думаю, что я совмещаю слишком много пунктов здесь. – Bren