[solved] Modifying every instance of a specific field


#1

Hello everyone, this is my first post on the forum. I started an internship a few weeks ago using the meteor framework. My latest task was to format phone numbers before they get sent to the db. Now that I have finished that I want to update all the existing users phone number to have the same format.

Here is an example of the collection
{ "_id" : "G4NjJaNRLpjkXqkfe", "Address" : { "zip" : "01960", "phone" : "1111111111" } }

I have a method that will take a phone number as a parameter and format it but I’m not really sure where to start as I’m not all that familiar with MongoDB. I figured I would ask here first and see if I can figure it out with some direction before bugging my lead dev, thank you.


#2

Hi!
I think it can be possible with RegExp query


#3

You’d probably want to do a Meteor.users.find() to get a list of all users that have something in the phone field (for this, google ‘mongo exist’). Something like:

const usersWithPhones = Meteor.users.find({ phone: { $exists: true } });

And then go over this list one by one with something like this:

usersWithPhones.forEach((user) => {
  const modifiedPhone = myFuncToGetModifiedPhone(user.phone);
  // write modifiedPhone to DB here using user._id
});

#4

Done similar stuff before - @vooteles has suggested code similar to what I use.

I simply do this on my startup hook -

	const allUsers = Meteor.users.find().fetch();
	allUsers.forEach(({ _id, phone }) => {
		const formatedPhone = methodToFormatPhone(phone);
		Meteor.users.update(
			{ _id },
			{ phone: formatedPhone }
		);
	});


#5

Hey guys, seen these replies a little late but it looks like I came up with the right solution.

Meteor.startup(function () {
  Workers.find().forEach((e) => {
    if (e.Address && e.Address.Phone) {
      Workers.update({ _id: e._id }, { '$set': { 'Address.Phone': phoneFormatter.format(e.Address.Phone, "NNN-NNN-NNNN") } })
    }
  });
});