Database
[{name:"abcd",manufacturer:"xyz",history:[{"condition":"new","price":150,"currency":"USD","timestamp":"aaaaaaaaaaaa"},{"condition":"new","price":140,"currency":"USD","timestamp":"ddddddddd"},]}]
Query
db.collection.update({name:"abcd",manufacturer:"xyz"},[{$addFields:{newHistory:[{"condition":"new","price":150,"currency":"USD","timestamp":"bbbbbbbbbbbb"},{"condition":"used","price":90,"currency":"USD","timestamp":"cccccccccccc"}],oldHistoryClean:{$map:{input:"$history",as:"item",in:{condition:"$$item.condition",price:"$$item.price",currency:"$$item.currency",key:{$concat:["$$item.condition",{$toString:"$$item.price"},"$$item.currency"]}}}}}},{$addFields:{newHistoryClean:{$map:{input:"$newHistory",as:"item",in:{condition:"$$item.condition",price:"$$item.price",currency:"$$item.currency",key:{$concat:["$$item.condition",{$toString:"$$item.price"},"$$item.currency"]}}}},newHistory:{$map:{input:"$newHistory",as:"item",in:{condition:"$$item.condition",price:"$$item.price",currency:"$$item.currency",timestamp:"$$item.timestamp",key:{$concat:["$$item.condition",{$toString:"$$item.price"},"$$item.currency"]}}}}}},{$set:{newHistoryClean:{$setDifference:["$newHistoryClean","$oldHistoryClean"]}}},{$set:{newHistoryClean:{"$map":{"input":"$newHistoryClean","in":{"$mergeObjects":["$$this",{"$arrayElemAt":["$newHistory",{"$indexOfArray":["$newHistory.key","$$this.key"]}]}]}}}}},{$set:{newHistoryClean:{"$map":{"input":"$newHistoryClean","as":"item","in":{condition:"$$item.condition",price:"$$item.price",currency:"$$item.currency",timestamp:"$$item.timestamp"}}}}},{$project:{history:{"$concatArrays":["$history","$newHistoryClean"]},name:1,manufacturer:1}}],{$upsert:true})