Объединение трех коллекций. Получить задания из коллекции job_posting пользователей, для которых уровень уведомлений равен true - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть три коллекции. 2.fav_companies {company_id, jobseeker_id} коллекция избранных компаний 3.job_postings {company_id, enable_status, job_created_at} коллекция объявлений о вакансиях . Мне нужно получить подробную информацию о job_postings из любимых компаний пользователей, которые имеют статус уведомления true.

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

  db.collection('user_details').aggregate([
        {$match : {user_favorite_company_notification_status: true}},
        {$lookup: {from : 'favorite_companies' ,localField : '_id', foreignField: 'jobseeker_id', as: 'fav_companies'}},
        { "$unwind": "$fav_companies" },
        {$lookup: {from : 'job_postings' , "pipeline":[
            {"$match":{
                $and:[
                    {company_id: "fav_companies.company_id"},
                    {enable_status: true},
                    {job_created_at: { $gt: previous_day}}
                    ]
                }
            }
            ], as: 'jobposts'}},
      ]).toArray((err, result)=>{
          console.log(result);
      })

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019
     db.collection('user_details').aggregate([
    {$match : {user_favorite_company_notification_status: true}},
    {$lookup: {from : 'favorite_companies' ,"let": { "user_id": "$_id" },
    "pipeline": [
        { "$match": {
            "$expr" : {
                "$and":[
                    {$eq:["$jobseeker_id","$$user_id"]},
                    {$eq:["$liked",true]}
                ]
            }
        } }
      ], as: 'fav_companies'}},
    { "$unwind": "$fav_companies"
     }
,
{$lookup: {from : 'job_postings' ,"let": { "companyId": "$fav_companies.company_id" },
"pipeline": [
    { "$match": {
        "$expr" : {
            "$and":[
                {$eq:["$company_id","$$companyId"]},
                {$eq:["$enable_status",true]},
                {$gt:["$job_created_at" , previous_day ] }

            ]
        }
    } }
  ], as: 'jobposts'}},
  { "$unwind": "$jobposts"
}  
0 голосов
/ 01 апреля 2019

Обновите свой код, указав код ниже единицы, и проверьте.

db.collection('user_details').aggregate([
    {$match : {user_favorite_company_notification_status: true}}, ,
    {$lookup: {from : 'favorite_companies' ,localField : '_id', foreignField: 'jobseeker_id', as: 'fav_companies'}},
    { "$unwind": "$fav_companies" },
    { 
        $lookup: {
            from: "job_postings",
            let: { company_id : "$fav_companies.company_id" },
            pipeline: [
                { 
                    $match:
                    { 
                        $expr:
                        { 
                            $and: [ 
                                    $eq : [{"$job_enable_status" : true}],
                                    $gt : [{"$job_created_at" : previous_day } ]
                                 ]

                        }
                    }
                }
            ],
            as: "fav_companies.jobposts"
        } 
    }
]).exec((err, result) => {
    console.log(result);
})
...