Сохраняйте, какие рецепты понравились пользователям, в mongodb / flask - PullRequest
0 голосов
/ 09 мая 2020

Создание страницы обмена рецептами в качестве школьного проекта на flask с помощью mongodb. Я хотел бы сохранить, какие рецепты понравились пользователям, чтобы они не могли понравиться больше одного раза в неделю. Первоначально я сделал это в сеансе, затем понял, что вы можете удалить, или он истечет et c. Подумал о том, чтобы сохранить _id понравившихся им рецептов, но не мог придумать, как хранить многие из них и просматривать их. Есть идеи, о которых я здесь не думаю? Я совсем новичок, поэтому прошу прощения, если это просто. Спасибо !!

1 Ответ

1 голос
/ 09 мая 2020

Я тоже новичок в MongoDB. Как насчет сохранения recipeID в поле массива (например, likedRecipes), которое является частью коллекции Users? Примерно так:

Коллекция пользователей:

[
    {
        'user' : 1,
        'likedRecipes': [
            1,
            4,
            5
        ]
    },
    {
        'user' : 2,
        'likedRecipes': [
            3,
            4,
            2
        ]
    }
]

Коллекция рецептов:

[
    {
        'id': 1,
        'name': 'Samosa',
        'ingredients': [...]
    },
    {
        'id': 2,
        'name': 'Paneer Tikka',
        'ingredients': [...]
    }
    ...,
    ...,
]

В пользовательском интерфейсе когда вы показываете рецепт для пользователя, вы можете проверить, понравился ли он уже рецепту или нет. Если пользователю уже понравился, то вы можете разрешить пользователю отличать его, иначе разрешить пользователю лайкать.

Ниже приводится запрос, чтобы узнать, понравился ли пользователю конкретный рецепт или нет:

db.user.aggregate([
    {
        $match: {
            user: 2
        }
    },
    {
        $project: {
            isLiked: {
                $cond: [
                    {$in: [1, "$likedRecipes"]},
                    true,
                    false
                ]
            }
        }
    }
])

Пояснение:

  1. Вам необходимо сопоставить авторизованный пользователь id, поэтому используется оператор $match.
  2. $cond используется для проверки наличия id текущего отображаемого рецепта в массиве likedRecipe вошедшего в систему пользователя, если да, то вернуть true иначе вернуть false.
  3. Используйте оператор $project чтобы поместить результат выше в новое поле с именем isLiked.

Надеюсь, это поможет.

...