programing

mongoose 저장 vs 삽입 vs 생성

javamemo 2023. 3. 6. 20:37
반응형

mongoose 저장 vs 삽입 vs 생성

Mongoose를 사용하여 MongoDB에 문서(레코드)를 삽입하는 방법에는 어떤 것이 있습니까?

현재 시도:

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

var notificationsSchema = mongoose.Schema({
    "datetime" : {
        type: Date,
        default: Date.now
    },
    "ownerId":{
        type:String
    },
    "customerId" : {
        type:String
    },
    "title" : {
        type:String
    },
    "message" : {
        type:String
    }
});

var notifications = module.exports = mongoose.model('notifications', notificationsSchema);

module.exports.saveNotification = function(notificationObj, callback){
    //notifications.insert(notificationObj); won't work
    //notifications.save(notificationObj); won't work
    notifications.create(notificationObj); //work but created duplicated document
}

왜 내 경우 삽입 및 저장 기능이 작동하지 않는지 아십니까?작성해보니 1개가 아닌 2개의 문서가 삽입되었습니다.이상하네.

.save()는 모델의 인스턴스 메서드입니다..create()에서 직접 호출됩니다.Model메서드 콜로서, 본질적으로 스태틱하며 오브젝트를 첫 번째 파라미터로 받아들입니다.

var mongoose = require('mongoose');

var notificationSchema = mongoose.Schema({
    "datetime" : {
        type: Date,
        default: Date.now
    },
    "ownerId":{
        type:String
    },
    "customerId" : {
        type:String
    },
    "title" : {
        type:String
    },
    "message" : {
        type:String
    }
});

var Notification = mongoose.model('Notification', notificationsSchema);


function saveNotification1(data) {
    var notification = new Notification(data);
    notification.save(function (err) {
        if (err) return handleError(err);
        // saved!
    })
}

function saveNotification2(data) {
    Notification.create(data, function (err, small) {
    if (err) return handleError(err);
    // saved!
    })
}

원하는 기능을 밖으로 내보냅니다.

Mongoose Docs에서 자세히 알아보거나 Mongoose에 있는 프로토타입의 참조 자료를 읽어보십시오.

다음 중 하나를 사용할 수 있습니다.save()또는create().

save()모델의 새 문서에서만 사용할 수 있습니다.create()모델에 사용할 수 있습니다.아래에 간단한 예를 제시하겠습니다.

둘러보기 모델

const mongoose = require("mongoose");

const tourSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, "A tour must have a name"],
    unique: true,
  },
  rating: {
    type: Number,
    default:3.0,
  },
  price: {
    type: Number,
    required: [true, "A tour must have a price"],
  },
});

const Tour = mongoose.model("Tour", tourSchema);

module.exports = Tour;

투어 컨트롤러

const Tour = require('../models/tourModel');

exports.createTour = async (req, res) => {
  // method 1
  const newTour = await Tour.create(req.body);

  // method 2
  const newTour = new Tour(req.body);
  await newTour.save();
}

반드시 방법 1 또는 방법 2를 사용하십시오.

Mongoose의 Constructing Documents 문서를 인용합니다.

const Tank = mongoose.model('Tank', yourSchema);

const small = new Tank({ size: 'small' });
small.save(function (err) {
  if (err) return handleError(err);
  // saved!
});

// or

Tank.create({ size: 'small' }, function (err, small) {
  if (err) return handleError(err);
  // saved!
});

// or, for inserting large batches of documents
Tank.insertMany([{ size: 'small' }], function(err) {

});

TLDR: Create 사용(저장 기능은 익스퍼트 모드)

Mongoose에서 create 메서드와 save 메서드를 사용하는 주된 차이점은 create는 자동으로 새로운 Model()과 save()를 호출하는 편리한 메서드이며 save는 Mongoose 문서 인스턴스에서 호출되는 메서드라는 것입니다.

Mongoose 모델에서 Create 메서드를 호출하면 모델의 새 인스턴스가 생성되고 등록 정보가 설정된 다음 문서가 데이터베이스에 저장됩니다.이 방법은 새 문서를 작성하고 한 번에 데이터베이스에 삽입하려는 경우에 유용합니다.이로 인해 생성은 원자성 트랜잭션으로 간주됩니다.따라서 저장 방법을 사용하면 코드에 비효율성/불일관성이 발생할 수 있습니다.

한편, Mongoose 문서를 변경한 후 저장 방법이 호출됩니다.이 방법은 문서의 유효성을 검사하고 변경사항을 데이터베이스에 저장합니다.

또 다른 차이점은 작성 방법은 문서 배열을 매개 변수로 전달하여 한 번에 여러 문서를 삽입할 수 있지만, 저장 방법은 단일 문서에서 사용됩니다.

따라서 모델의 새 인스턴스를 생성하여 데이터베이스에 한 번에 저장하려면 작성 방법을 사용할 수 있습니다.데이터베이스에 저장할 모델의 기존 인스턴스가 있는 경우 저장 방법을 사용해야 합니다.

또한 콘텐츠 스키마에 검증 또는 사전 저장 후크가 있는 경우 작성 방법을 사용할 때 트리거됩니다.

언급URL : https://stackoverflow.com/questions/38290684/mongoose-save-vs-insert-vs-create

반응형