Как найти не вставленные / пропущенные строки при использовании waterline's model.create / createEach - PullRequest
0 голосов
/ 14 сентября 2018

У меня проблема с тем, что я должен создать 10K документов.Очевидно, что я не могу сделать один за другим, поэтому я создал массив документов и использую его следующим образом

let arr = [
  { username: "admin", password: "asdasdas", id_ref: "2" },
  { username: "admin2", password: "asdasdas", id_ref: "3" },
  { username: "admin3", password: "asdasdas", id_ref: "3" },
  { username: "admin9", password: "asdasdas", id_ref: "3" },
  { username: "admin7", password: "asdasdas", id_ref: "3" },
  { username: "admin6", password: "asdasdas", id_ref: "3" },
  { username: "admin5", password: "asdasdas", id_ref: "3" },
]
User.createEach(arr).exec(function (err, res) {
  console.dir(err)
})

, но проблема в том, что у меня есть уникальное ограничение на username.Поэтому, если пользователь уже существует, он не будет дублироваться.
Решения, которые я пробовал

  1. Я использовал цикл for, и сначала я использовал User.find, чтобы получитьпользователь, если нет, то вставьте.Но понадобилось около 10 минут, чтобы создать 1400 документов и пропустить 1300, которые уже существовали.Так что это не оптимальное решение.
  2. Я попробовал описанный выше пример, но потом не знаю, какой документ создается, а какой пропущен, так как по ошибке я вижу, что он связан только с одним документом.
    Пример ошибки :

    { username:[ { rule: 'unique',
          value: 'admin',
          message: 'A record with that `username` already exists (`admin`).' } ] }
    

Но я ожидал множество ошибок документов, которые не вставлены.

Есть ли способ решить мою проблему?Если я найду пропущенные строки, это будет отличное решение.

1 Ответ

0 голосов
/ 02 октября 2018

Попробуйте использовать асинхронный метод lib eachSerie для циклического перемещения по вашему массиву https://caolan.github.io/async/docs.html#eachSeries и используйте метод ватерлинии findOrCreate https://sailsjs.com/documentation/reference/waterline-orm/models/find-or-create

...