0
Привет, почему я получаю повторяющиеся ошибки ввода. Я делаю проверку заранее, если документ находится в базе данных. Моя модель требует уникальности для idName
. Я загружаю данные из массива JSON, prooven только false, нет записей с true.MongoDb Duplicate Entry Error
async.map recipe.zutaten,
(ingredient, cb) ->
#Save all ingredients
ingredient.idName = ingredient.name.replace(/[^a-zA-Z0-9]+/gi, "").toLowerCase()
ingredientModel.find({ idName: ingredient.idName }, (err, ingredientFound) ->
return next err if err
ingredientsJson = {"idName":ingredient.idName, "name":ingredient.name, "amount":ingredient.amount}
#if found just pass it to recipes
if ingredientFound? && ingredientFound.length > 0
ingredientsJson.prooven = true
return cb null, ingredientsJson
#if not found evaluate if to save
else
#if not prooven just add the json to recipes
if(ingredient.prooven? && ingredient.prooven == false)
ingredientsJson.prooven = false
return cb null, ingredientsJson
#if prooven save it into database
else
ingredientDBObject = new ingredientModel()
ingredientDBObject.name = ingredient.name
ingredientDBObject.idName = ingredient.idName
ingredientDBObject.save((err) ->
return cb err if err
ingredientsJson.prooven = true
return cb null, ingredientsJson
)
)
...
Ошибка
{ [MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: database.ingredients.$idName_1 dup key: { : "zitronensaft" }]
name: 'MongoError',
message: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: database.ingredients.$idName_1 dup key: { : "zitronensaft" }',
index: 0,
code: 11000,
errmsg: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: database.ingredients.$idName_1 dup key: { : "zitronensaft" }' }
Я думаю, что проблема связана с асинхронным характером находки. Async выполняет итерацию через компоненты, даже если cb еще не возвращен. Я уже перемещал 'component.idName = component.name.replace (/ [^ a-zA-Z0-9] +/gi," ") .toLowerCase()' внутри функции поиска. –