Sembra $addToSet sta facendo la stessa cosa del tuo comando:$push con un controllo $ne . Entrambi sarebbero O(N)
https://github.com/mongodb /mongo/blob/master/src/mongo/db/ops/update_internal.cpp
se la velocità è davvero importante, allora perché non usare un hash:
invece di:
{'$addToSet': {'a':1}}
{'$addToSet': {'a':10}}
usa:
{$set: {'a.1': 1}
{$set: {'a.10': 1}