Mongoose Query с вычисленным приоритетом в узле js - PullRequest
0 голосов
/ 14 сентября 2018

Коллекция 1: Series ofMovies

  • MovieType (Сериал, Триология, Кино)
  • Категория фильма (Ужасы, Триллер, Действие и т. Д.)1008 *
  • RegionLocation (США, Калифорния, ЕС и т. Д.)

Коллекция 2: Фильмы

  • Категории фильмов (идентификаторкатегории)
  • Movie_relatedSerie (идентификатор MovieSerie)

Коллекция 3: Пользователь

  • Пользовательские настройки (которые содержат предпочтительный фильмТипы, предпочтительные категории фильмов, предпочтительное расположение региона)

NB: , принимая во внимание, что типы фильмов, категории фильмов и расположение регионов являются массивами идентификаторов

Примечание: Принимая во внимание, что пользователь может выбрать один или несколько или ни одного из следующих элементов: Типы, категории и регион

Проблема : мне нужно выполнить запроспринимая во внимание тип, категорию и расположение фильма, исходя из предпочтений пользователяпоказать соответствующие сериалы фильмы пользователю.

Решение: , которое я достиг:

  • поиск доступных фильмов с приоритетом для следующих комбинаций: фильмы относятся к предпочтительному типу фильма,предпочитаемая категория фильма и предпочтительное RegionLocation

  • , если region и введите и category , то предоставьте определенный пример оценки 7

  • если введите и категории , тогда наберите 6
  • , если регион и категории оценка5
  • если регион и введите оценка 4
  • если категории только тогда наберите 3
  • если введите только оценка 2
  • если регион только оценка 1
  • , затем сортируйте фильмы по баллам
  • , затем группируйте фильмы по Movie_relatedserie
  • , затем отобразите серию на основе упомянутой выше релевантности

Mongoose Query, который я пробовал, но не отображал элементы по мере необходимости.кольцо всегда показывает 0 для всех элементов

узел js Код маршрута, который содержит запрос:

    router.post('/seriesmovies/:skip/:limit',function(req,res){
     if(req.body.Categories) {
        Categoryids = req.body.Categories.map(function(el) {
            return mongoose.Types.ObjectId(el) 
        });
    }else{
        Categoryids =[]
    }
    if (req.body.region) {
        RegionIds = req.body.region.map(function(el){
            return mongoose.Types.ObjectId(el)
        });
    } else {
        RegionIds = []
    }
    if (req.body.type) {
       Typeids =  req.body.type.map(function(el){
            return mongoose.Types.ObjectId(el)
        });
    }else {
        Typeids=[]
    }
    Movies.aggregate([
        { $lookup: {from: 'MoviesSeries', localField: 'Movie_relatedSerie ', foreignField: '_id', as: 'moviesseries'} },

        { "$match": { 
            "$or": [ 
                { "Moviecategories ": {$in:Categoryids}},
                { "moviesseries.Type": {$in:Typeids}},
                {"moviesseries.regionlocation": {$in:RegionIds}},
            ]
        }},



        { "$project": { 

            "moviesseries.Type":1,
            "moviesseries.regionlocation":1,
            "moviesseries._id":1,
            "Moviecategories ":1,
            "_id": 1, 
            "scoring": {

                 "$cond" :{
                     "if": {
                         "$and": [{
                                 "$in": ["$moviesseries.Type",Typeids] 
                             },{
                                 "$in": ["$Moviecategories",Categoryids] 
                             },{
                                 "$in": ["$moviesseries.regionlocation",RegionIds]
                             }]
                     },
                     "then":7,
                     "else": {
                         "$cond":{
                             "if": {
                                 "$and": [{
                                         "$in": ["$moviesseries.Type",Typeids] 
                                     },{
                                         "$in": ["$Moviecategories",Categoryids] 
                                     }
                                 ]
                             },
                             "then":6,
                             "else":{
                                 "$cond":{
                                     "if": {
                                         "$and": [{
                                                 "$in": ["$moviesseries.regionlocation",RegionIds]
                                             },{
                                                 "$in": ["$Moviecategories",Categoryids] 
                                             }
                                         ]
                                     },
                                   "then":5,
                                     "else":{
                                        "$cond":{
                                             "if": {
                                                 "$and": [{
                                                         "$in": ["$moviesseries.regionlocation",RegionIds]
                                                     },{
                                                         "$in": ["$moviesseries.Type",Typeids] 
                                                     }
                                                 ]
                                             },
                                         "then":4,
                                         "else":{
                                             "$cond":{
                                                 "if": {                                                      
                                                     "$in": ["$Moviecategories",Categoryids] 
                                                 },
                                                 "then":3,
                                                 "else":{
                                                     "$cond":{
                                                         "if": {                                                      
                                                             "$in": ["$moviesseries.Type",Typeids] 
                                                         },
                                                     "then":2,
                                                     "else":{
                                                         "$cond":{
                                                             "if": {                                                      
                                                                 "$in": ["$moviesseries.regionlocation",RegionIds]
                                                             },
                                                         "then":1,
                                                         "else":0 
                                                     }
                                                        }   }
                                         }}}
                                     }
                             }
                         }

                     }

                 }
             }
         }
     }


        }},
        { "$sort":  { "scoring": 1 } }
        { $group : { _id : "$moviesseries" }}
    ]).skip(Number(req.params.skip))
    .limit(Number(req.params.limit)).exec(function(err,endresult){
        if(err) {
            res.status(422).json({
                status:'Failed',
                error: err
            });
        }else {
            res.json({
                status:'success',
                data: endresult
            });
        }

    });
});
...