在javascript数组中应用Meteor集合插入for循环

时间:2016-02-12 18:16:49

标签: meteor

我是javascript的新手,也是Meteor的新手。这段代码是否正确?我需要定义一个函数,它将获取一组值并将它们插入Meteor Collection" FooterButtons"?

客户端代码

replaceCollectionContents(['NO', 'B', 'YES']);

两个代码

replaceCollectionContents = function (buttonsList) {
  FooterButtons.remove();
  for(i = 0; i < buttonsList.length; i++) {
    FooterButtons.insert(buttonsList[i]);
  }
};

2 个答案:

答案 0 :(得分:1)

您不能直接将字符串插入集合。 insert方法需要一个object类型的文档。

试试这个 -

FooterButtons.insert({ text: buttonsList[i] });

此外,我注意到您正在尝试清除FooterButtons集合。请注意,您无法从客户端清除此类集合,因为它被视为不受信任的代码。从客户端,您只能一次删除一个文档,由_id。

指定

我建议你改用一种方法。

Meteor.methods({
  replaceCollectionContents: function (buttonsList) {
    // remove all existing documents in the collection
    FooterButtons.remove({});

    // insert new button documents into the collection
    buttonsList.forEach(function (button) {
      FooterButtons.insert({ text: button });
    });
  }
});

并在需要时调用此方法

Meteor.call("replaceCollectionContents", ['NO', 'B', 'YES']);

在方法内部,请注意我正在将{}选择器传递给remove方法,因为出于安全原因,如果省略选择器,Meteor不会删除任何文档。

您可以在Meteor文档中详细了解remove

答案 1 :(得分:1)

如果我理解正确,您需要将数据播种到FooterButtons集合中,对吗?

将此代码放在server文件夹的某处:

buttonsList = ['NO', 'B', 'YES'];

if (FooterButtons.find().count() === 0) {
  _.each(buttonsList, function(button) {
    FooterButtons.insert({text: button});
  });
}

运行meteor并检查你的mongodb FooterButtons集合。让我知道。如果这项工作,我会解释

如果您需要更新,请更新它:

FooterButtons.update({text:'B'}, {$set:{text:'Extra'}});