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

조회수 4718회
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);
    }
  });
}

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

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

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 자답입니다.

    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

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)