Я тоже новичок в 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
]
}
}
}
])
Пояснение:
- Вам необходимо сопоставить авторизованный пользователь
id
, поэтому используется оператор $match
. $cond
используется для проверки наличия id
текущего отображаемого рецепта в массиве likedRecipe
вошедшего в систему пользователя, если да, то вернуть true
иначе вернуть false
. - Используйте оператор
$project
чтобы поместить результат выше в новое поле с именем isLiked
.
Надеюсь, это поможет.