Условие в понедельник goose $ Поиск - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь присоединиться к пн goose.

У меня две коллекции

  1. Master Challenge

  2. История испытаний

Моя История испытаний Содержит поле master_id , которое является ссылкой на _id из Master Challenge

Master Challenge Model

const mongoose = require('mongoose');

const masterChallenge = mongoose.Schema({
  title:{
    type:String,
  },
  descripton:{
    type:String,
  },
  challengeType:{
    type:Number,
  },
  
});

module.exports = mongoose.model('masterChallenge',masterChallenge);

Модель истории испытаний

const mongoose = require('mongoose');

const challangeHistory= mongoose.Schema({

  master_id:{
    type: mongoose.Schema.Types.ObjectId,
    ref:'masterchallenges'
  },
  host_user_id:{
    type: mongoose.Schema.Types.ObjectId,
    ref:'useraccounts'
  },
  compete_with_id:{
    type: mongoose.Schema.Types.ObjectId,
    ref:'useraccounts'
  },
  adjucator_id:{
    type: mongoose.Schema.Types.ObjectId,
    ref:'useraccounts'
  },
  status:{
    type:Number,
  },
  created_at:{
    type:Date,
  }
});

module.exports = mongoose.model('challangeHistory',challangeHistory);

id = 'user _id' (для абзаца ниже)

Я хочу выполнить присоединение к Master Challange, чтобы получить только те записи из Master Challenge, которые имеет host_user_id == id или Compette_with_id == id или adjucator_id == id , если мой тип Master Challenge - 1, иначе статус вызова 0, тогда он не должен выполнять никаких операция для host_user_id или compte_with_id или adjucator_id и вернуть этот документ с вызовом 0.

My Query * 10 58 *

findMasterOnHistory:async function(id){

let dbResponse = await MASTER_CHALLENGE.aggregate([
       {$lookup:{from:'challangehistories',localField:'_id',foreignField:'master_id',as:'challangehistories'}},
     ]);
   
return dbResponse;
}

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

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Вот ответ на мой вопрос. Я использовал Pipeline внутри $ lookUp

  1. Saved _id из Master Challenge в master .
  2. Выполнено $ и для соответствия История задачи -> master_id до _id [$$ master] из Challenge Master .
  3. Выполнено $ или внутри $ и для получения данных на основе host_user_id или compte_with_id или adjucator_id .
{
  from: 'challangehistories',
  let: {
               master:"$_id",
               
             },
   pipeline:[
                {
                  $match:{
                    $expr:{
                      $and:[
                        {$eq:["$$master","$master_id"]},
                        {$or:[
                            {
                              $or:[
                                  {$eq:["$host_user_id",ObjectId(id)]},
                                  {$eq:["$compete_with_id",ObjectId(id)]},
                                  {$eq:["$adjucator_id",ObjectId(id)]},
                                ]
                            }
                            
                          ]},
                      ],
                    },
                    
                    
                  }
                },
             ],
  as: 'challangehistories'
}

0 голосов
/ 14 июля 2020

Вы можете использовать конвейер на этапе $lookup:

Например, ваш host_user_id хранится в переменной, которую я вызываю hostUserId.

let dbResponse = await MASTER_CHALLENGE.aggregate([{
                         $lookup: {
                            from: 'challangehistories',
                            'let': {masterId: '$_id'},
                            pipeline: [{
                              $and: [{
                                $eq: ['$master_id', '$$masterId']
                              }, {
                                $eq: ['$host_user_id', hostUserId]
                              }]
                            }],
                            as: 'challangehistories'
                         }
                       }])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...