2015-12-23 4 views
0

У меня есть следующая схемаMongoDB Дублировать запись

var customerSchema = new Schema({ 
    customerID: String, 
    phoneNumber: String 
}) 

customerSchema.path('customerID').validate(function (customerID, next) { 
    Customer.findOne({customerID: customerID}, function (err, user) { 
     if (err) { 
      return next(false); 
     } 
     if (!user) { 
      return next(true); //Valid 
     } else { 
      return next(false); 
     } 
    }); 
}, 'customerID Already Exists'); 

Это прекрасно работает, когда я пытаюсь добавить тот же CUSTOMERID. Это не позволит мне. Но ранее я попытался нажать кнопку ADD на раз на другой компьютер. Так или иначе добавляется тот же самый идентификатор клиента.

Как предотвратить появление таких случаев краев? Я использую MongoLab. Есть ли проблема с задержкой?

ответ

0

Вполне возможно, чтобы иметь этот тип поведения:

Press add button on computer1 
Press add button on computer2 
Validation occurs for the first add and the customer does not exist 
Validation occurs for the second add BEFORE the first insert is done and the customer does not yet exist 
Both adds succeed 

Вы можете поставить ограничение уникальности на поле на уровне базы данных, чтобы предотвратить это - https://docs.mongodb.org/v3.0/tutorial/create-a-unique-index/

В зависимости от ваших потребностей, вы можете также имеет «upsert», который обновляет или вставляет новую запись. В вашем случае, если вас беспокоит двух пользователей, создающих нового пользователя с тем же идентификатором, просто поместите в него индекс в базе данных.

+0

Спасибо! Кроме того, похоже, что «эти ограничения не позволяют приложениям вставлять документы, которые имеют повторяющиеся значения для вставленных полей». Что мне нужно сделать для «обновления»? Предположим, я хочу обновить идентификатор клиента. Как я могу предотвратить его обновление до того же идентификатора клиента. Должен ли я вручную найтиОн и проверить перед обновлением? – Zanko

+0

Кроме того, в чем смысл проверки? Если мы сможем использовать уникальный индекс? Это тип поведения, который вы указали, произошел, как база данных вернет сообщение? – Zanko

+0

Вы можете проверить другие типы правил, например, имя соответствует определенному шаблону. База данных вернет исключение, связанное с ограничениями, но вы можете обработать это и вернуть любое сообщение, которое вы хотите. –

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