将用户喜欢的菜谱存储在mongodbflask中。

问题描述 投票:0回答:1

用mongodb在flask中创建一个菜谱分享页面作为学校项目。我想存储用户喜欢过哪些菜谱,让用户不能多喜欢一次w。我本来是在session里做的,后来发现可以删除,否则会过期等。想过存储他们喜欢的食谱的_id,但无法找出如何存储许多人,并通过他们看。任何想法,我没有想到这里?我很新,所以我道歉,如果这是简单的.谢谢你!

python mongodb flask pymongo
1个回答
1
投票

我对MongoDB也是新手。怎么样存储 recipeID 中的数组字段(如 likedRecipes)的一部分,它是 Users 收藏?像下面这样。

Users collection:

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

食谱集合。

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

在UI中,当你在为用户展示菜谱时,你可以对用户是否已经点赞进行检查,如果用户已经点赞,那么你可以允许用户取消点赞,否则允许用户点赞。如果用户已经点赞,则可以允许用户取消点赞,否则允许用户点赞。

下面是查询用户是否已经赞过某个菜谱的方法。

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.

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.