node.js에서 mongodb로 저장할 때, 중복되지 않게 저장하는 방법이 따로 있나요?


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

var schema = new Schema({
  name: {type: String, required: true, unique: true},
  img: {type: String, required: true},
  field: {type: String, required: true},
  amount: {type: String, required: true}
}, {
  toJSON: {virtuals: true },
  toObject: {virtuals: true}
});

var Recipe_name = mongoose.model('Recipe_name', schema);

module.exports = Recipe_name;

이렇게 mongoose 모듈을 사용해서 모델을 정의했는데,

unique: true 속성을 넣으면 디비에 저장할 때 중복 제거되서 저장되야 하는게 아닌가요?

자꾸 중복된 값이 저장되네요.... 다른 방법이 있나요?

for(var i in obj) {
    (function(i) {
        saveRecipeName(obj[i].name, obj[i].img, obj[i].field, obj[i].amount);
    })(i);
}
function saveRecipeName(name, img, field, amount) {
  var recipe_name = new Recipe_name({
    name: name,
    img: img,
    field: field,
    amount: amount
  });
  recipe_name.save(function(error) {
    if(error) {
      console.log(error);
    } else {
      console.log('save recipe_name: '+name);
    }
  });
}

저장하는 코드는 위와 같이 구현했습니다.

노드를 처음 써보는거라 좀 지저분 할 수 있어요ㅠㅠ


조회수 289


1 답변


좋아요
0
싫어요
채택취소하기

자답입니다.

function save(id, title, callback) {
    Value.findOneAndUpdate(
       {id: id, title: title}, /* query */
       {id: id, title: title}, /* update */
       { upsert: true}, /* create if it doesn't exist */
       callback);
}

이런식으로 findOneAndUpdate 를 통해 찾고

upsert: true 속성을 주게 되면 디비에 없는 경우에만 생성하게 됩니다.

참고링크 : StackOverFlow


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close