How to save subset data of one colection in another collection in SpringBoot Mongo DB

I have 1 collection namely profile now since it has lots of properties and since in future I will be needing more properties i decided to add new data in new collection namely profile_details .I will be keeping 1 field in profile_details namely profileId whose value will be same as primary key of collection profile.

I will be saving data of profile in profile collection using profileRepository.save(profile)

In order to save data in profile_details collection I am using aggregation pipeline in order to save data of profile_details collection but $out operator replaces documents instead of inserting new documents.Below is my sample code.Any help will be deeply appreciated

Profile.java

import java.io.Serializable;
import java.time.Instant;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.stereotype.Component;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.juv.common.bean.model.RecentHealthMetricData;
import com.juv.common.enums.CurrentLanding;
import com.juv.common.enums.MFAPreference;
import com.juv.common.enums.Status;
import com.juv.common.primary.bean.model.Answer;
import com.juv.common.primary.bean.model.DeviceIntegrations;
import com.juv.common.primary.bean.model.DeviceToken;

@Document(collection = "profile")
@JsonIgnoreProperties(ignoreUnknown = true)
@Component
public class Profile extends ProfileDetails implements Serializable {

	
	/**
	 * 
	 */
	private static final long serialVersionUID = 6608898578832145751L;

	@Id
	private String profileId;

	@Field("kibo_user_id")
	@JsonProperty("kibo_user_id")
	private String kiboUserId;

	@Field("new_recommendations")
	@JsonProperty("new_recommendations")
	private List<String> newRecommendations;

	@Field("kibo_id")
	@JsonProperty("kibo_id")
	private String kiboId;
	
	@Field("original_kibo_id")
	@JsonProperty("original_kibo_id")
	private String originalKiboId;

	@Field("email")
	@JsonProperty("email")
	private String email;

	@Field("country")
	@JsonProperty("country")
	private String country;

	@Field("first_name")
	@JsonProperty("first_name")
	private String firstName;

	@Field("last_name")
	@JsonProperty("last_name")
	private String lastName;

	@CreatedDate
	@Field("created_date")
	@JsonProperty("created_date")
	private Date createdDate;

	@Field("registration_date")
	@JsonProperty("registration_date")
	private Date registrationDate;

	@LastModifiedDate
	@Field("last_modified")
	@JsonProperty("last_modified")
	private Date lastModified;

	@Field("phi_mapping_id")
	@JsonProperty("phi_mapping_id")
	private String phiMappingId;

	@Field("phone_number")
	@JsonProperty("phone_number")
	private String phoneNumber;

	@Field("origin")
	@JsonProperty("origin")
	private String origin;

	@Field("gender")
	@JsonProperty("gender")
	private String gender;

	@Field("status")
	@JsonProperty("status")
	private Status status;
	
	@Field("current_landing")
	@JsonProperty("current_landing")
	private CurrentLanding currentLanding;

	@Field("mfa_preference")
	@JsonProperty("mfa_preference")
	private MFAPreference mfaPreference;

	@Field("profile_recommendation_info_id")
	@JsonProperty("profile_recommendation_info_id")
	private String profileRecommendationInfoId;
	
	@Field("oldest_profile_recommendation_info_id")
	@JsonProperty("oldest_profile_recommendation_info_id")
	private String oldestProfileRecommendationInfoId;

	@Field("last_question")
	@JsonProperty("last_question")
	private String lastQuestion;

	@Field("answers")
	@JsonProperty("answers")
	private Answer[] answers;
	
	@Field("is_account_locked")
	@JsonProperty("is_account_locked")
	private boolean isAccountLocked;
	
	@Field("device_integrations")
	@JsonProperty("device_integrations")
	private DeviceIntegrations deviceIntegrations ;
	
	@Field("profile_photo")
	@JsonProperty("profile_photo")
	private String profilePhoto;

	@Field("device_token_list")
	@JsonProperty("device_token_list")
	private List<DeviceToken> deviceTokenList;
	
	@Field("unit_map")
	@JsonProperty("unit_map")
	private Map<String,String> unitMap;
	
	@Field("recent_health_metric_values")
	@JsonProperty("recent_health_metric_values")
	private Map<String,RecentHealthMetricData> recentHealthMetricValues;
	
	@Field("last_recommendation_info_date")
	@JsonProperty("last_recommendation_info_date")
	private Date lastRecommendationInfoDate;

	@Field("terms_conditions")
	@JsonProperty("terms_conditions")
	private boolean termsConditions;
	
	@Field("health_metric_preferences")
	@JsonProperty("health_metric_preferences")
	private Map<String, String> healthMetricPreferences;

	@Field("device_preferences")
	@JsonProperty("device_preferences")
	private Map<Integer, String> devicePreferences;

	@Field("pinpoint_custom_atributes")
	@JsonProperty("pinpoint_custom_atributes")
	private Map<String,String> pinpointCustomAttributes;
	
	@Field("opt_juvlab_customer")
	@JsonProperty("opt_juvlab_customer")
	private boolean optJuvLabsCustomer;
	
	@Field("deleted")
	@JsonProperty("deleted")
	private boolean deleted;
	
	@Field("deleted_timestamp")
	@JsonProperty("deleted_timestamp")
	private Instant deletedTimestamp;
	
	@Field("daily_action_count_clevertap")
	@JsonProperty("daily_action_count_clevertap")
	private int dailyActionCountClevertap;
	
	public String getProfileId() {
		return profileId;
	}

	public void setProfileId(String profileId) {
		this.profileId = profileId;
	}

	public String getKiboUserId() {
		return kiboUserId;
	}

	public void setKiboUserId(String kiboUserId) {
		this.kiboUserId = kiboUserId;
	}

	public String getKiboId() {
		return kiboId;
	}

	public void setKiboId(String kiboId) {
		this.kiboId = kiboId;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		if (email != null) {
			email = email.toLowerCase();
		}
		this.email = email;
	}

	public String getCountry() {
		return country;
	}

	public void setCountry(String country) {
		this.country = country;
	}

	public Date getCreatedDate() {
		return createdDate;
	}

	public void setCreatedDate(Date createdDate) {
		this.createdDate = createdDate;
	}

	public Date getRegistrationDate() {
		return registrationDate;
	}

	public void setRegistrationDate(Date registrationDate) {
		this.registrationDate = registrationDate;
	}

	public Date getLastModified() {
		return lastModified;
	}

	public void setLastModified(Date lastModified) {
		this.lastModified = lastModified;
	}

	public String getPhiMappingId() {
		return phiMappingId;
	}

	public void setPhiMappingId(String phiMappingId) {
		this.phiMappingId = phiMappingId;
	}

	public String getPhoneNumber() {
		return phoneNumber;
	}

	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}

	public String getOrigin() {
		return origin;
	}

	public void setOrigin(String origin) {
		this.origin = origin;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}

	public CurrentLanding getCurrentLanding() {
		return currentLanding;
	}

	public void setCurrentLanding(CurrentLanding currentLanding) {
		this.currentLanding = currentLanding;
	}

	public MFAPreference getMfaPreference() {
		return mfaPreference;
	}

	public void setMfaPreference(MFAPreference otpPreference) {
		this.mfaPreference = otpPreference;
	}

	public String getProfileRecommendationInfoId() {
		return profileRecommendationInfoId;
	}

	public void setProfileRecommendationInfoId(String profileRecommendationInfoId) {
		this.profileRecommendationInfoId = profileRecommendationInfoId;
	}

	public String getLastQuestion() {
		return lastQuestion;
	}

	public void setLastQuestion(String lastQuestion) {
		this.lastQuestion = lastQuestion;
	}

	public Answer[] getAnswers() {
		return answers;
	}

	public void setAnswers(Answer[] answers) {
		this.answers = answers;
	}
	
	public boolean isAccountLocked() {
		return isAccountLocked;
	}

	public void setAccountLocked(boolean isAccountLocked) {
		this.isAccountLocked = isAccountLocked;
	}

	public enum ORIGIN {
		APP,
		KIBO,
		SHOPIFY
	}

	public String getProfilePhoto() {
		return profilePhoto;
	}

	public void setProfilePhoto(String profilePhoto) {
		this.profilePhoto = profilePhoto;
	}

	public DeviceIntegrations getDeviceIntegrations() {
		return deviceIntegrations;
	}

	public void setDeviceIntegrations(DeviceIntegrations deviceIntegrations) {
		this.deviceIntegrations = deviceIntegrations;
	}

	public List<DeviceToken> getDeviceTokenList() {
		return deviceTokenList;
	}

	public void setDeviceTokenList(List<DeviceToken> deviceTokenList) {
		this.deviceTokenList = deviceTokenList;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	
	public Map<String, String> getUnitMap() {
		
		return unitMap;
	}

	public void setUnitMap(Map<String, String> unitMap) {
		
		this.unitMap = unitMap;
	}

	public Date getLastRecommendationInfoDate() {
		return lastRecommendationInfoDate;
	}

	public void setLastRecommendationInfoDate(Date lastRecommendationInfoDate) {
		this.lastRecommendationInfoDate = lastRecommendationInfoDate;
	}

	public boolean isTermsConditions() {
		return termsConditions;
	}

	public void setTermsConditions(boolean termsConditions) {
		this.termsConditions = termsConditions;
	}

	public Map<String, String> getHealthMetricPreferences() {
		return healthMetricPreferences;
	}

	public void setHealthMetricPreferences(Map<String, String> healthMetricPreferences) {
		this.healthMetricPreferences = healthMetricPreferences;
	}

	public Map<String, String> getPinpointCustomAttributes() {
		return pinpointCustomAttributes;
	}

	public void setPinpointCustomAttributes(Map<String, String> pinpointCustomAttributes) {
		this.pinpointCustomAttributes = pinpointCustomAttributes;
	}

	public Map<Integer, String> getDevicePreferences() {
		return devicePreferences;
	}

	public void setDevicePreferences(Map<Integer, String> devicePreferences) {
		this.devicePreferences = devicePreferences;
	}
	public Map<String, RecentHealthMetricData> getRecentHealthMetricValues() {
		if(recentHealthMetricValues==null) {
			recentHealthMetricValues = new HashMap<>();
		}
		return recentHealthMetricValues;
	}

	public void setRecentHealthMetricValues(Map<String, RecentHealthMetricData> recentHealthMetricValues) {
		
		this.recentHealthMetricValues = recentHealthMetricValues;
	}

	public List<String> getNewRecommendations() {
		return newRecommendations;
	}

	public void setNewRecommendations(List<String> newRecommendations) {
		this.newRecommendations = newRecommendations;
	}

	public boolean isOptJuvLabsCustomer() {
		return optJuvLabsCustomer;
	}

	public void setOptJuvLabsCustomer(boolean optJuvLabsCustomer) {
		this.optJuvLabsCustomer = optJuvLabsCustomer;
	}

	public boolean isDeleted() {
		return deleted;
	}

	public void setDeleted(boolean deleted) {
		this.deleted = deleted;
	}

	public Instant getDeletedTimestamp() {
		return deletedTimestamp;
	}

	public void setDeletedTimestamp(Instant deletedTimestamp) {
		this.deletedTimestamp = deletedTimestamp;
	}

	public String getOriginalKiboId() {
		return originalKiboId;
	}

	public void setOriginalKiboId(String originalKiboId) {
		this.originalKiboId = originalKiboId;
	}

	public String getOldestProfileRecommendationInfoId() {
		return oldestProfileRecommendationInfoId;
	}

	public void setOldestProfileRecommendationInfoId(String oldestProfileRecommendationInfoId) {
		this.oldestProfileRecommendationInfoId = oldestProfileRecommendationInfoId;
	}

	public int getDailyActionCountClevertap() {
		return dailyActionCountClevertap;
	}

	public void setDailyActionCountClevertap(int dailyActionCountClevertap) {
		this.dailyActionCountClevertap = dailyActionCountClevertap;
	}

}

ProfileDetails.java

import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import com.fasterxml.jackson.annotation.JsonProperty;

@Document(collection = "profile_details")
public class ProfileDetails  {

	@Field("profile_id")
	private String profileId;

	@Field("partner_code")
	@JsonProperty("partner_code")
	private String partnerCode;

	public String getProfileId() {
		return profileId;
	}

	public void setProfileId(String profileId) {
		this.profileId = profileId;
	}

	public String getPartnerCode() {
		return partnerCode;
	}

	public void setPartnerCode(String partnerCode) {
		this.partnerCode = partnerCode;
	}


}

ProfileFragmentRepositoryImpl.java

package com.juv.common.secondary.repository.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.AddFieldsOperation;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationOptions;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.ArrayOperators.ArrayElemAt;
import org.springframework.data.mongodb.core.aggregation.LimitOperation;
import org.springframework.data.mongodb.core.aggregation.LookupOperation;
import org.springframework.data.mongodb.core.aggregation.MatchOperation;
import org.springframework.data.mongodb.core.aggregation.OutOperation;
import org.springframework.data.mongodb.core.aggregation.SetOperation;
import org.springframework.data.mongodb.core.aggregation.SortOperation;
import org.springframework.data.mongodb.core.aggregation.UnsetOperation;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Component;

import com.juv.common.constants.CommonConstants;
import com.juv.common.secondary.dao.Profile;
import com.juv.common.secondary.dao.ProfileDetails;
import com.juv.common.secondary.repository.ProfileFragmentRepository;
import com.juv.common.secondary.repository.ProfileRepository;
import com.mongodb.internal.operation.InsertOperation;

@Component
public class ProfileFragmentRepositoryImpl implements ProfileFragmentRepository {
	

	@Autowired
	private MongoTemplate secondaryMongoTemplate;

	@Autowired
	private ProfileRepository profileRepository;

	@Override
	public void saveProfileDetails(Profile profile) {
		
		MatchOperation filterOnProfileId = Aggregation.match(Criteria.where("profileId").is(profile.getProfileId()));
				
		SetOperation setProfileId = SetOperation.set("profileId").toValue(profile.getProfileId());

		SetOperation setPartnerCode = SetOperation.set("partnerCode").toValue(profile.getPartnerCode());
				
		OutOperation outOperation = new OutOperation("profile_details").uniqueKey("profileId").insertDocuments();
		
		
		Aggregation aggregation = Aggregation.newAggregation(filterOnProfileId,setProfileId,setPartnerCode,outOperation);

		System.out.println("------------------------"+aggregation);
		
		AggregationResults<ProfileDetails> output = secondaryMongoTemplate.aggregate(aggregation, Profile.class, ProfileDetails.class);
		System.out.println("------------------------"+output);
	}
	
}

$out operator replaces documents instead of inserting new documents.How can i make them insert data instead of replacing them