내 프로젝트에서 특정 모델에 대해 slug
을 구현 중이며 고유하고 문서 데이터를 기반으로하고 싶습니다.몽구스 고유의 자동 증가 슬러그
var user = new User({ name: { first: 'John', last: 'Doe' });
user.save().then(function(user) {}); // user.slug === 'john-doe'
var user2 = new User({ name: { first: 'John', last: 'Doe' });
user2.save().then(function(user) {}); // user.slug === 'john-doe-2'
을 성공적으로 구현할 수
, 심지어과 같이, .pre('save')
후크에 DB를 조회 할 수 있습니다
UserSchema.pre('save', function(next) {
var user = this;
return User.distinct('slug')
.exec()
.then(function(slugs) {
// generate a unique slug like "john-doe-2",
// checking it against slugs that are already
// in the database, and set it to user
next();
});
});
유일한 문제는 (여전히 가능성이 있지만, 가능성) 동시 요청입니다
var user = new User({ name: { first: 'John', last: 'Doe' }),
user2 = new User({ name: { first: 'John', last: 'Doe' });
Promise.all([ user.save(), user2.save() ]);
// throws validation error if slug should be unique
그 때문에 유효성 검사 오류 (고유 색인 중복)를 처리하고 업데이트 된 매개 변수 (예 : "john-doe-2")로 문서를 다시 저장하려고하는 해결책을 찾고 있습니다. .
저장시이 오류를 처리하는 것이 문제가 될 수 있습니다. 이미 프리 세이브 핸들러에서 벗어났습니다. 다른 컬렉션 'users-slug'를 생성하고 슬러그를 거기에 삽입하려고 시도 할 수 있습니다 (슬러그 필드도 고유해야 함). 사전 저장에서 할 수 있습니다. 거기에서 실패하면 슬러그를 바꾸고 다시 시도 할 수 있습니다. –