Change values of one firestore collection with data of a second one

I am a bit confused, I am trying to build 1 response by querying one collection, and trying to change some values of the first observable with values of a related query.

i.e.
1. On the first collection I have the system categories with 'position' that is the default value:
Categories = [{name:'cat1', id:'id', position:1},...]
2. on the second one I have the user values /user_id/categories
UserCategories = [{cat_id:1, position:3},...]

Now I need to change the position value, based on the user, so I have this on my service:

  getCategoriesAfsOld() {
    this.categoriesCollection = this.afs.collection('category');
    return this.categoriesCollection
      .snapshotChanges()
      .map(category => {
        return category.map(data => {
          const catData = data.payload.doc.data() as Category;
          const usrData = this.afs.doc(`/user/${this.auth.getUserID()}/category/${data.payload.doc.id}`)
            .valueChanges();
          usrData.subscribe( (catByUsr: CatByUser) =>{
              if(typeof catByUsr !== "undefined"){
                catData.position = catByUsr.position;
              }
            }
          );
          catData.id = data.payload.doc.id;
          return catData;
        });
      });
  }

Now, this almost does the trick, but because I am using map(), it returns the the data unchanged and after a short time it sends the data changed again with the new positions.
As you might guess this is not good, I need to send the data modified on the first call,and probably stop the stream. I know this can be accomplished by using switchMap, I have not being able to do this.

I am doing something really wrong or maybe looking in the wrong direction.

Please some help or guidance.

The following is one of many failed tries:

  getCategoriesAfs() {
    this.categoriesCollection = this.afs.collection('category');
    return this.categoriesCollection
      .snapshotChanges()
      .switchMap(category => {
        return  category.map(data => {
          const catData = data.payload.doc.data() as Category;
          catData.id = data.payload.doc.id;
          const usrData = this.afs
.doc(`/user/${this.auth.getUserID()}/category/${data.payload.doc.id}`)
            .valueChanges().switchMap(((value) => {
              const data = [];
              return data;
            }));
          usrData.subscribe( (catByUsr) =>{
              if(typeof catByUsr !== "undefined"){
                catData.position = catByUsr.position;
              }
            }
          );
          return catData;
        });
      });
  }