LINUX.ORG.RU

Как реализовать вставку/обновление с использованием Mongoose?

 , , ,


0

1

Есть вот такой код. Он апдейтит документы или добавляет их в коллекцию, если их нет.

static async saveCities(cities) {
  try {
    const bulk = db.collection("cities").initializeUnorderedBulkOp();
    for (const city of cities)
      bulk.find({ id: city.id }).upsert().replaceOne(city);
    await bulk.execute();
  } catch (error) {
    console.log(error);
    return false;
  }
  return true;
}
Как такое же поведение реализовать с помощью Mongoose?

Deleted

Сделал через статичный метод в модельке, вот так:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var citySchema = new Schema({
  id:        { type: Number, required: true, unique: true },
  title:     { type: String, required: true },
  important: { type: Number },
  translit:  { type: String, required: true }
});

citySchema.statics.bulkUpsert = async function(citiesArray) {
  try {
    const bulk = this.collection.initializeUnorderedBulkOp();
    for (const city of citiesArray)
      bulk.find({ id: city.id }).upsert().replaceOne(city);
    await bulk.execute();
  } catch (error) {
    console.log(error);
    return false;
  }
  return true;
};

var City = mongoose.model('City', citySchema);

module.exports = City;

Deleted
()

никак. в этой пародии на базы данных нет транзакционности.

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

dzidzitop ★★
()
Последнее исправление: dzidzitop (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.