MongoDB: как вставить, если не существует


Вы можете использовать следующий синтаксис для вставки документа в коллекцию в MongoDB, только если он еще не существует:

db.teams.update(
 {
 team : 'Hornets'
 }, 
 {
 $setOnInsert : {team: 'Hornets', points: '58', rebounds: '20'}
 },
 {upsert: true }
)

Этот конкретный код проверяет, имеет ли поле «команда» значение «Шершни». Если это значение существует, то ничего не произойдет.

Однако, если это значение не существует, будет вставлен документ с определенными значениями для полей «команда», «очки» и «подборы».

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: вставить, если не существует в MongoDB

Предположим, у нас есть коллекция под названием team со следующими документами:

db.teams.insertOne({team: " Mavs", points: 30, rebounds: 8})
db.teams.insertOne({team: " Spurs", points: 35, rebounds: 12})
db.teams.insertOne({team: " Rockets", points: 20, rebounds: 7})
db.teams.insertOne({team: " Warriors", points: 25, rebounds: 5})
db.teams.insertOne({team: " Cavs", points: 23, rebounds: 9})

Предположим, мы используем следующий код, чтобы попытаться вставить документ для команды «Mavs»:

db.teams.update(
 {
 team : 'Mavs'
 }, 
 {
 $setOnInsert : {team: 'Mavs', points: '58', rebounds: '20'}
 },
 {upsert: true }
)

Так как поле «команда» уже содержит информацию для «Мавс», ни один из документов не будет изменен.

Однако предположим, что мы используем следующий код для вставки документа для команды «Шершни»:

db.teams.update(
 {
 team : 'Hornets'
 }, 
 {
 $setOnInsert : {team: 'Hornets', points: '58', rebounds: '20'}
 },
 {upsert: true }
)

Поскольку поле «команда» уже не содержит информации для «Шершней», в коллекцию будет добавлен новый документ со значениями, которые мы указали для каждого поля.

Вот как выглядит обновленная коллекция:

{ _id: ObjectId("6203df361e95a9885e1e764a"),
 team: 'Mavs',
 points: 30,
 rebounds: 8 }
{ _id: ObjectId("6203df361e95a9885e1e764b"),
 team: 'Spurs',
 points: 35,
 rebounds: 12 }
{ _id: ObjectId("6203df361e95a9885e1e764c"),
 team: 'Rockets',
 points: 20,
 rebounds: 7 }
{ _id: ObjectId("6203df361e95a9885e1e764d"),
 team: 'Warriors',
 points: 25,
 rebounds: 5 }
{ _id: ObjectId("6203df361e95a9885e1e764e"),
 team: 'Cavs',
 points: 23,
 rebounds: 9 }
{ _id: ObjectId("6203e17de42bfba74fc73325"),
 team: 'Hornets',
 points: '58',
 rebounds: '20' }

Обратите внимание, что для команды «Шершни» добавлен новый документ.

Примечание.Полную документацию по функции $upsert можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в MongoDB:

MongoDB: как добавить новое поле
MongoDB: как удалить поле
MongoDB: как подсчитать различные значения в поле

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.