Что такое оператор $addToSet в MongoDB и чем он отличается от $push?
Этот вопрос проверяет знание операторов MongoDB для работы с массивами в документах, а именно различие между $addToSet и $push.
Короткий ответ
Оператор $addToSet добавляет значение в массив, только если его нет в этом массиве, предотвращая дубли. В отличие от него, оператор $push добавляет элемент в массив без проверки на дубли.
Длинный ответ
Что такое $addToSet? Оператор $addToSet используется в MongoDB для добавления значения в массив, только если это значение отсутствует в массиве. Это гарантирует, что в массиве будут храниться только уникальные элементы.
Как это работает: MongoDB проверяет, существует ли уже значение в массиве. Если значение есть, оно не добавляется. Если значение отсутствует, оно добавляется в массив.
Пример использования $addToSet:
db.collection.update(
{ _id: 1 },
{ $addToSet: { tags: "mongodb" } }
);Если "mongodb" еще нет в массиве tags, оно будет добавлено. Если же "mongodb" уже есть, массив останется неизменным.
Как это отличается от $push?
$push всегда добавляет новое значение в массив, независимо от того, есть ли оно уже в массиве. Это может привести к появлению дубликатов.
$addToSet гарантирует, что в массиве не будет дубликатов, добавляя только уникальные значения.
Пример использования $push:
db.collection.update(
{ _id: 1 },
{ $push: { tags: "mongodb" } }
);В этом примере "mongodb" будет добавлено в массив tags, даже если оно уже там есть.
Используйте $addToSet, когда нужно сохранить уникальные элементы в массиве, и $push, когда дубликаты допустимы.