Merge documents from 2 collections in MongoDB & preserve property of a field

Try with this aggregation query.

db.temporarCollection.aggreagate(
[
  {
    "$lookup": {
      "from": "permanantCollection", 
      "let": {
        "user_id": "$userID"
      }, 
      "pipeline": [
        {
          "$match": {
            "$expr": {
              "$eq": [
                "$$user_id", "$userID"
              ]
            }
          }
        }
      ], 
      "as": "pcontacts"
    }
  }, {
    "$unwind": {
      "path": "$pcontacts", 
      "preserveNullAndEmptyArrays": true
    }
  }, {
    "$project": {
      "contacts": {
        "$map": {
          "input": "$contacts", 
          "as": "contact", 
          "in": {
            "tcontact": "$$contact", 
            "pcontact": {
              "$first": {
                "$filter": {
                  "input": "$pcontacts.contacts", 
                  "as": "pcontact", 
                  "cond": {
                    "$eq": [
                      "$$pcontact.recordID", "$$contact.recordID"
                    ]
                  }
                }
              }
            }
          }
        }
      }, 
      "userNumber": 1, 
      "userID": 1, 
      "_id": 0
    }
  }, {
    "$project": {
      "contacts": {
        "$map": {
          "input": "$contacts", 
          "as": "contact", 
          "in": {
            "emailAddresses": "$$contact.tcontact.emailAddresses", 
            "phoneNumbers": "$$contact.tcontact.phoneNumbers", 
            "ContactName": "$$contact.tcontact.ContactName", 
            "ContactNumber": "$$contact.tcontact.ContactNumber", 
            "recordID": {
              "$let": {
                "vars": {}, 
                "in": {
                  "$cond": {
                    "if": "$$contact.pcontact.recordID", 
                    "then": "$$contact.pcontact.recordID", 
                    "else": "$$contact.tcontact.recordID"
                  }
                }
              }
            }, 
            "_id": {
              "$let": {
                "vars": {}, 
                "in": {
                  "$cond": {
                    "if": "$$contact.pcontact._id", 
                    "then": "$$contact.pcontact._id", 
                    "else": "$$contact.tcontact._id"
                  }
                }
              }
            }
          }
        }
      }, 
      "userNumber": 1, 
      "userID": 1
    }
  }, {
    "$merge": {
      "into": "pc", 
      "on": "userID", 
      "whenMatched": "replace", 
      "whenNotMatched": "insert"
    }
  }
])

It is not a fully optimized query but it works.