#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
})
случай обновления:
db.collection.update({
emp: "A"
},
{
$set: {
name: "nameA1",
age: 47
},
"$setOnInsert": {
_id: 1,
emp: "A"
}
},
{
upsert: true
})