Заменяйте старые записи при вставке новых повторяющихся записей в Mongoose

#python #mongodb #mongoose #insert-update

#python #mongodb #mongoose #вставить-обновить

Вопрос:

Коллекция MongoDB:

db.collection.find()

  { _id:'...', emp: 'A', name: 'nameA', age: 23 }
 { _id:'...', emp: 'B', name: 'nameB', age: 54 }
 { _id:'...', emp: 'C', name: 'nameC', age: 45 }
 

Данные, которые вставляются в коллекцию:

  { _id:'...', emp: 'D', name: 'nameA', age: 22 }
 { _id:'...', emp: 'B', name: 'nameB1', age: 34 }
 { _id:'...', emp: 'A', name: 'nameA1', age: 47 }
 { _id:'...', emp: 'E', name: 'nameE', age: 23 }
 

Данные дублированной строки emp будут заменены новыми добавленными значениями.
Вывод после вставки новых данных в коллекцию:

  { _id:'...', emp: 'A', name: 'nameA1', age: 47 }
 { _id:'...', emp: 'B', name: 'nameB1', age: 34 }
 { _id:'...', emp: 'C', name: 'nameC', age: 45 }
 { _id:'...', emp: 'D', name: 'nameD', age: 22 }
 { _id:'...', emp: 'E', name: 'nameE', age: 23 }
 

Комментарии:

1. В чем вопрос?

2. При добавлении новых записей в коллекцию дублированные значения строк emp будут заменены новыми.

3. Итак, я предполагаю emp , что поле не является уникальным значением, и вы хотите, чтобы emp: 'A' вместо их удаления было несколько объектов? Удаление обычно происходит, когда у вас возникает проблема с ограничениями на заданные поля. Можете ли вы предоставить функцию, в которой вы вызываете базу данных для вставки новых объектов?

4. Я хочу заменить старый emp: ‘A’ на новые значения name и age. И я использую базовый метод вставки для вставки новых данных.

5. используйте обновление с опцией upsert

Ответ №1:

Укажите upsert: true в параметрах обновления.

Вставить регистр:

 db.collection.update({
  emp: "E"
},
{
  $set: {
    name: "nameE",
    age: 23
  },
  "$setOnInsert": {
    _id: 5,
    emp: "E"
  }
},
{
  upsert: true
})
 

Игровая площадка Mongo

случай обновления:

 db.collection.update({
  emp: "A"
},
{
  $set: {
    name: "nameA1",
    age: 47
  },
  "$setOnInsert": {
    _id: 1,
    emp: "A"
  }
},
{
  upsert: true
})
 

Игровая площадка Mongo