C'est une proposition juste dans votre question, mais vous avez fondamentalement un mauvais concept.
La première est que vous avez manqué le concept selon lequel les tableaux en général ont leurs entrées commençant à un index de 0
pour le premier élément, votre "positionnement" est donc inférieur d'une unité dans ce cas et aurait dû être :
db.collection.update(
{ _id: tsId },
{$push: { 'subdoc.array': { "$each":["3", "4"], "$position": 3 } }}
)
Et puisque vous insérez maintenant à la bonne position, vos éléments sont au bon endroit.