Database
- bson
- mgodatagen
[{"_id":ObjectId("613219a4e89bd87a297c7dec"),"conf":"conferenceXYZ","users":[{"sessions":[[{"br":"Chrome 92","ts":1.234567891e+09}],[{"br":"Chrome 100","ts":1.234567891e+09}]],"uid":"2dd8b4e3-9dcd-4da6-bc36-aa0988dc9650"}]}]
Query
db.collection.update({"conf":"conferenceXYZ"},[{"$set":{"uid":"2dd8b4e3-9dcd-4da6-bc36-aa0988dc9650","umetrics":{"ts":1234567891,"bw":200}}},{"$set":{"new-user":{"$eq":[{"$filter":{"input":{"$cond":["$users","$users",[]]},"as":"u","cond":{"$eq":["$$u.uid","$uid"]}}},[]]}}},{"$set":{"users":{"$cond":["$new-user",{"$concatArrays":[{"$cond":[{"$isArray":["$users"]},"$users",[]]},[{"uid":"$uid","sessions":[["$umetrics"]]}]]},{"$map":{"input":"$users","as":"u","in":{"$cond":[{"$eq":["$$u.uid","$uid"]},{"$mergeObjects":["$$u",{"sessions":{"$cond":[/**Check browser metric br is present*/{"$eq":[{"$type":"$umetrics.br"},"string"]},/**if condition above is true, create a new array in sessions array*/{"$concatArrays":["$$u.sessions",[["$umetrics"]]]},/**else, add the metric into the last array of sessions array*/{"$concatArrays":[{"$slice":["$$u.sessions",{"$subtract":[{"$size":"$$u.sessions"},1]}]},[{"$concatArrays":[{"$last":"$$u.sessions"},["$umetrics"]]}]]}]}}]},"$$u"]}}}]}}},{"$unset":["uid","umetrics","new-user"]}],{"upsert":true})