Ключевое различие заключается в обработке дубликатов:
$push добавляет элемент в массив без условий, даже если он уже существует$addToSet добавляет элемент только если его ещё нет, обеспечивая уникальность всех значений$push$push используется, когда дубликаты допустимы или намеренны. Например, при логировании повторяющихся событий или отслеживании нескольких временных меток:
db.orders.updateOne(
{ _id: 1 },
{ $push: { tags: "urgent" } }
)
Даже если "urgent" уже существует в массиве, он будет добавлен снова.
$addToSet$addToSet используется, когда массив должен вести себя как множество — содержать только уникальные значения:
db.orders.updateOne(
{ _id: 1 },
{ $addToSet: { tags: "urgent" } }
)
Если "urgent" уже присутствует, массив остаётся неизменным.
$push, когда важны порядок или частота, например в логах активности или потоках событий$addToSet, когда требуется уникальность, например при хранении отдельных категорий или ролей пользователейОператор $push добавит элемент в массив независимо от того, существует ли этот элемент в массиве.
Новый — ещё не проверен сообществом
Вы