Но у меня есть решение о разрешении для MOngo на Git Кстати , вставляет код - у него есть имя фильма, но идентификатор фильма noi.
У вас есть коллекция Актеров с массивом фильмов, которые они сделали.
Вы хотите создать коллекцию фильмов с массивом Актеров в каждом.
Некоторые данные образца
db.actors.insert( { actor: "Richard Gere", movies: ['Pretty Woman', 'Runaway Bride', 'Chicago'] });
db.actors.insert( { actor: "Julia Roberts", movies: ['Pretty Woman', 'Runaway Bride', 'Erin Brockovich'] });
Нам нужно прокрутить каждый фильм в документе Actor и выдать каждый фильм по отдельности.
Улов здесь находится в фазе уменьшения. Мы не можем испускать массив из фазы уменьшения, поэтому мы должны построить массив Actors внутри возвращаемого документа «value».
Код
map = function() {
for(var i in this.movies){
key = { movie: this.movies[i] };
value = { actors: [ this.actor ] };
emit(key, value);
}
}
reduce = function(key, values) {
actor_list = { actors: [] };
for(var i in values) {
actor_list.actors = values[i].actors.concat(actor_list.actors);
}
return actor_list;
}
Обратите внимание, что actor_list - это фактически объект javascript, который содержит массив. Также обратите внимание, что карта испускает ту же структуру.
Запустите следующую команду, чтобы выполнить карту / уменьшить, вывести ее в коллекцию «pivot» и напечатать результат:
printjson (db. actors.mapReduce (карта, уменьшить, «поворот»)); db.pivot.find (). forEach (printjson);
Вот пример вывода, обратите внимание, что у «Pretty Woman» и «Runaway Bride» есть как «Richard Gere», так и «Julia Roberts».
{ "_id" : { "movie" : "Chicago" }, "value" : { "actors" : [ "Richard Gere" ] } }
{ "_id" : { "movie" : "Erin Brockovich" }, "value" : { "actors" : [ "Julia Roberts" ] } }
{ "_id" : { "movie" : "Pretty Woman" }, "value" : { "actors" : [ "Richard Gere", "Julia Roberts" ] } }
{ "_id" : { "movie" : "Runaway Bride" }, "value" : { "actors" : [ "Richard Gere", "Julia Roberts" ] } }
Вот моя попытка объяснить эти варианты. Перед этим я хотел бы кратко упомянуть о Oauth2 , который является протоколом, на котором основан AWS Cognito.
В контексте AWS Cognito сам Cognito является сервером аутентификации (OAuth) , а также сервером ресурсов (поскольку мы создаем пользователей в пуле пользователей Cognito), и ваше приложение будет быть клиентом (который отправляет запрос аутентификации). Клиент должен сначала зарегистрироваться на сервере OAuth - это то, что делается в разделе «Клиенты приложений» в Cognito.
Рекомендованный поток OAuth2 - Код авторизации Предоставить поток . В этом потоке
i) Клиент отправляет имя пользователя / пароль на OAuth-сервер.
ii) Сервер OAuth проверяет и вызывает клиент с помощью кода авторизации .
iii) Клиент снова отправляет этот код обратно на сервер OAuth
iv) Сервер OAuth отправляет токены Клиенту.
blockquote>Пожалуйста, прочитайте вышеупомянутую связанную статью для получения дополнительной информации об OAuth2.
Теперь объясним параметры в настройках клиента Cognito App:
1. Включите API входа для аутентификации на основе сервера
С помощью этой опции ваше клиентское приложение может напрямую получать токены , не имея дополнительного шага для первого получения кода авторизации.
Существуют API Cognito, такие как AdminInitiateAuth, Admin- *, которые делают это. Однако эти API требуют учетных данных администратора AWS. Следовательно, обычно эти вызовы выполняются внутренним сервером клиентского приложения. Внешний интерфейс может передать имя пользователя / пароль бэкэнду, а внутренний сервер может обмениваться данными с AWS Cognito и авторизовать пользователя.
2. Разрешить только пользовательскую аутентификацию
Здесь вы не используете поток предоставления кода авторизации, предоставленный OAuth. Вместо этого вы можете определить свои собственные шаги и проблемы. Ваше клиентское приложение может задать секретный вопрос и т. Д. Перед аутентификацией и выдачей токенов.
3. Включить поток имени пользователя и пароля (не SRP) для аутентификации на основе приложений
Это наименее безопасный поток. Это пропускает часть возврата кода авторизации и напрямую возвращает токены обратно клиенту.
1123 Надеюсь, это объяснит.