2012-01-11 4 views
0

У меня есть Пользователь (документ), в котором я поддерживаю коллекцию друзей (встроенный документ). Я пытался убедиться, что для данного пользователя все его друзья уникальны (адрес электронной почты должен быть уникальным). Однако это ограничение не применяется, и я не могу понять, почему. Кто-нибудь мог бы помочь мне в этом?Как обеспечить уникальность в коллекции встроенного документа

Я использую Mongo 2.2 и Mongoose.

var FriendSchema = new mongoose.Schema({ 
    email   : { type: String, required: true, lowercase: true, trim: true } 
    , name    : { type: String, trim: true } 
}); 


var UserSchema = new mongoose.Schema({ 
    email   : { type: String, required: true, index: { unique: true }, lowercase: true, trim: true } 
    , friends   : [FriendSchema] 
}); 

UserSchema.index({ 'friend.email': 1 }, { unique: true }); 

ответ

0

Уникальные индексы означают, что никакие другие документы не вставлены с тем же значением, указанным в индексе, это не относится к встроенным документам. Если вы попытались добавить [email protected] пользователям A и B, он должен выйти из строя из-за уникального индекса.

Вам нужно будет принудительно выполнить это в Node.JS, а не пытаться сделать это с помощью уникального индекса.

+0

Я столкнулся с этой проблемой. Можно ли позволить Node.js справиться с этим? Не удалось ли выполнить обход во время асинхронного вызова? – wtjones

+0

Да, но нет другого варианта. Вы можете сделать что-то вроде двухэтапного сохранения, чтобы попытаться уменьшить вероятность. Но в конце дня, если БД не будут применять его, вы столкнетесь с этой проблемой. –

Смежные вопросы