Можно ли использовать Push или addToSet для нескольких элементов, например, этот код добавляет одно примечание, если оно еще не существует, в массив поддокументов для пользователя. Но что, если у меня есть 200 заметок?
const note = { id: 1 };
User.update(
{name: 'admin', 'notes.id': {$ne: note.id}},
{$push: {notes: note}},
function(err, numAffected) { ... });
Можно ли использовать цикл foreach и запустить этот код 200 раз?
Но тогда я упускаю из виду весь смысл проверки Mongoose, верно?
Какая именно проверка? Обновление снова пройдет через Mongoose, так что разницы быть не должно?
Итак, вы бы тогда проверили, является ли note.id уникальным на стороне клиента? Поскольку у Mongoose есть этот уникальный валидатор, который я могу добавить в свою схему NoteSchema ..
Вы про это: npmjs.com/package/mongoose-unique-array? Насколько я понимаю - я не являюсь пользователем Mongoose - это произойдет при сохранении / обновлении, поэтому оно должно работать. Просто попробуйте!
@dnickless, чтобы добавить к вашей рекомендации, чтение, изменение и отправка должны происходить в рамках сеанса транзакции, поскольку в противном случае теряется атомарная функция обновления
Это нормально, но медленно. Тем не менее, я не знаю "способа MongoDB" сделать это лучше. Я бы порекомендовал просто прочитать документ, изменить его на клиенте и затем отправить все это в базу данных за одно обновление.