Обновление функции прошивки с ошибками «обновление не разрешено»

#mongodb #mongodb-stitch

#mongodb #mongodb-stitch

Вопрос:

У меня есть функция прошивки, которая выполняет несколько действий, и я получаю сообщение об ошибке в этой строке:

 try {
  // voteAsObjectId is the Id of the photo to vote converted to BSON.ObjectId.
  await db
    .collection('photos')
    .updateOne({ "_id": voteAsObjectId }, { "$inc": { votes: 1 }});
} catch (err) {
  throw new Error("An error occurred while updating photo's votes:"   err);
}
  

Ошибка заключается в следующем:

 StitchError: update not permitted
  

Похоже, ошибка, связанная с разрешениями, но в моем приложении есть некоторые другие функции, и они успешно выполняют все .find .insert .aggregate запросы and к этой коллекции, только .updateOne .updateMany операции and вызывают у меня проблемы.

Разрешения моей коллекции выглядят следующим образом:

введите описание изображения здесь

Это моя схема:

введите описание изображения здесь

И вот пример документа:

введите описание изображения здесь

Комментарии:

1. Что такое выражение Apply When вашего правила? (т.е. при нажатии карандаша)

2. @ChrisBush это {}

3. Перейдите в раздел «Пользователи» и «Просмотр активности» для получения дополнительной информации об ошибке

Ответ №1:

Я бы рекомендовал проверить следующее:

  1. Проверьте вкладку схемы и посмотрите, есть ли в ваших документах что-нибудь, что не соответствует настроенной схеме. Схема имеет конфигурацию по умолчанию, которая может не соответствовать фактической схеме ваших документов. Возможно, вам потребуется изменить эту схему, чтобы заставить обновление работать.

  2. Нажмите кнопку редактирования (карандаш) на роли «по умолчанию» и установите флажок «Применить, когда» роли. Возможно, документ, который вы пытаетесь обновить, не соответствует какой-либо роли и роль нуждается в обновлении.

Если это не сработает, проверьте журналы приложений, нажав кнопку «Журналы» на боковой панели: вкладка «Журналы»

Там вы можете увидеть ошибку «обновление не разрешено», но с более подробной информацией о том, почему обновление не удалось.

Комментарии:

1. Ошибка взята из журналов, другой информации нет (кроме функции, которая ее вызвала, и ее аргументов). Я несколько раз проверял схему, и мне это кажется правильным, но я добавлю скриншот, если вы считаете, что это проблема. Применить, когда установлено значение {}, я не знаю, правильно это или нет.

2. Применить, если установлено значение {}, означает, что роль будет применяться для каждого документа, так что, вероятно, это не проблема. Можете ли вы отправить скриншот схемы и образец документа из вашей коллекции?

3. Хм, интересно, есть ли ошибка, из-за которой он по какой-то причине пытается преобразовать число в int32 при выполнении приращения. Что произойдет, если вы полностью исключите «голоса» из схемы? (Мы неявно разрешаем использовать все поля в любое время, поэтому, если это проблема с полем «голоса», это должно устранить ошибку.)

4. Я попытался обновить поле «title», используя $set, и оно по-прежнему выдает ту же ошибку.

5. Возможно ли, что в документе, который вы пытаетесь обновить, есть поля, которые не соответствуют схеме, потому что они были вставлены вне Stich? Другими словами, можете ли вы запустить «await db.collection (‘photos’) .findOne({ «_id»: voteAsObjectId })» и распечатать документ, чтобы убедиться, что он соответствует схеме?