Fred J.
Fred J.

Reputation: 6029

Applying Meteor collection insert in javascript array for loop

I am new to javascript and very new to Meteor. Is this code correct? I need to define a function which will take an array of values and insert them in a Meteor Collection "FooterButtons"?

Client code

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

Both code

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

Upvotes: 0

Views: 143

Answers (2)

umesh
umesh

Reputation: 338

You cannot directly insert a string to a collection. The insert method expects a document which is of type object.

Try this instead -

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

Also, I notice that you are trying to clear your FooterButtons collection. Please note that you cannot clear a collection like this from the client side as it is considered untrusted code. From client side, you can only remove one document at a time, specified by its _id.

I would recommend you to use a method instead.

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 });
    });
  }
});

And call this method when needed

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

Inside the method, note that I'm passing a {} selector to the remove method because for safety reasons, Meteor does not remove any documents if selector is omitted.

You can read more about remove in Meteor docs.

Upvotes: 1

asingh
asingh

Reputation: 534

If I understand correctly, you need to seed data into FooterButtons collection, correct?

Put this code somewhere on your server folder:

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

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

Run meteor and check your mongodb FooterButtons collection. Let me know. I'll make explanation if this work

If you need to update, then update it:

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

Upvotes: 1

Related Questions