#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. Применить, если установлено значение {}, означает, что роль будет применяться для каждого документа, так что, вероятно, это не проблема. Можете ли вы отправить скриншот схемы и образец документа из вашей коллекции?
3. Хм, интересно, есть ли ошибка, из-за которой он по какой-то причине пытается преобразовать число в int32 при выполнении приращения. Что произойдет, если вы полностью исключите «голоса» из схемы? (Мы неявно разрешаем использовать все поля в любое время, поэтому, если это проблема с полем «голоса», это должно устранить ошибку.)
4. Я попытался обновить поле «title», используя $set, и оно по-прежнему выдает ту же ошибку.
5. Возможно ли, что в документе, который вы пытаетесь обновить, есть поля, которые не соответствуют схеме, потому что они были вставлены вне Stich? Другими словами, можете ли вы запустить «await db.collection (‘photos’) .findOne({ «_id»: voteAsObjectId })» и распечатать документ, чтобы убедиться, что он соответствует схеме?