Пожалуйста, посмотрите это Модели и запросы, которые могут помочь вам построить схемы .
1. Схема пользователя
let UserSchema = new mongoose.Schema({
username: {
type: String,
index: true
},
password: {
type: String
},
email: {
type: String
},
name: {
type: String
},
watchlist: [mongoose.Schema.Types.Mixed],
like : [mongoose.Schema.Types.ObjectId], //remove
deslike : [mongoose.Schema.Types.ObjectId], //remove
seen : [{
movieId : { type: : mongoose.Schema.Types.ObjectId, ref: 'Movie' },
isStatus : {type : string} //Enum [like,dislike,'seen']
}]
})
2. Схема фильма
let movieSchema = new mongoose.Schema({
tile: {
type: String
},
description: { type: String }
})
3.Хранилище данных в обеих таблицах
/ Пользователь /
{
"_id" : ObjectId("5b5acaf0589ff6bfb5dd091f"),
"seen" : [
{
"movieId" : ObjectId("5b9e2544953b5f69683059d4"),
"isStatud" : "like"
},
{
"movieId" : ObjectId("5b9e2544953b5f69683059d6"),
"isStatud" : "dislike"
},
{
"movieId" : ObjectId("5b9e256d953b5f69683059ee"),
"isStatud" : "seen"
}
]
"like" : [
ObjectId("5b9e2544953b5f69683059d4"),
ObjectId("5b9e256d953b5f69683059ee")
],
"deslike" : [
ObjectId("5b9e2544953b5f69683059d6")
]
}
/ фильм /
{
"_id" : ObjectId("5b9e2544953b5f69683059d4"),
"title" : "movie1",
"description" : "desc1"
}
{
"_id" : ObjectId("5b9e2544953b5f69683059d6"),
"title" : "movie2",
"description" : "desc2"
}
{
"_id" : ObjectId("5b9e256d953b5f69683059ee"),
"title" : "movie3",
"description" : "desc3"
}
Запрос на получение пользователей по фильму
/ Это нормально работает и проверено /.
db.getCollection('user').aggregate([{
$match : { _id : ObjectId("5b5acaf0589ff6bfb5dd091f") }
},
{$lookup : {
from : 'movie',
localField : 'like',
foreignField : '_id',
as : "likes"
}},
{$lookup : {
from : 'movie',
localField : 'deslike',
foreignField : '_id',
as : "deslikes"
}}
])
/ Запрос с группой /
db.getCollection('user').aggregate([{
$match : { _id : ObjectId("5b5acaf0589ff6bfb5dd091f") }
},
{$unwind : '$seen'},
{$lookup : {
from : 'movie',
localField : 'seen.movieId',
foreignField : '_id',
as : "seen.movieData"
}},
{$unwind : '$seen.movieData'},
{ $group: { "_id": "$_id",
"name" : { "$first": "$name" }, //use same all other field of user
"seen" : {"$push" : "$seen"}
} ,
}
])
Пожалуйста, проверьте и сообщите мне любую помощь.