Как я могу получить данные из более чем одной коллекции в Монго, используя mongoose - PullRequest
0 голосов
/ 14 мая 2019

Как отобразить подробные данные профиля, когда эти данные хранятся в нескольких коллекциях

пробовал это ссылка

 const profile = await userKushala
      .find({_id: '5cd407c741f9e7373f10362c'})
      .populate({
        path: 'settingId',
        populate : {
            path : 'specialty',
          populate : {
            path: 'hospital_attached'
          }
        }
      })

// Первая коллекция (базовая информация)

const userRegisterSchema = new Schema({
userType: {
    type: String,
    required: true
},
mobile: {
    type: Number,
    required: true,
    unique: true
},
userId: {
    type: String,
    required: true
},
name: {
    type: String,
    required: true
},
email: {
    type: String,
    required: true
},
age: {
    type: Number,
    required: true
},
gender: {
    type: String,
    required: true
},
settingId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'providerSetting'
}
})

// Вторая коллекция (подробная информация)

const serviceProfileUpdate = new Schema({
   specialty :[{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'specialtyMasterCsv'
}],
category: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'categoryMasterCsv'
}],
subscriptionPlan: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'planMasterCsv'
},
medicine: {
    type : mongoose.Schema.Types.ObjectId,
    ref: 'kushalaUser' 
}
})

// Данные в монго

{  
   "_id":{  
      "$oid":"5cd93ea6bd96e43664f49bf3"
   },
   "specialty":[  
      {  
         "$oid":"5cda85f26ffe60259a75ba17"
      },
      {  
         "$oid":"5cda85f26ffe60259a75ba18"
      }
   ],
   "category":[  
      {  
         "$oid":"5cda85f26ffe60259a75ba17"
      },
      {  
         "$oid":"5cda85f26ffe60259a75ba18"
      }
   ],
   "subscriptionPlan":{  
      "$oid":"5cda85f26ffe60259a75ba17"
   },
   "medicine":{  
      "$oid":"5cd407c741f9e7373f10362c"
   },
   "__v":{  
      "$numberInt":"0"
   }
}

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

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Попробуйте заполнить так:

.populate([
    {path:'category',model:'categoryMasterCsv'},
    {path:'subscriptionPlan',model:'planMasterCsv'},
    {path:'medicine',model:'kushalaUser'}])

Это метод, который я использую ежедневно.

0 голосов
/ 15 мая 2019

Это то, что я сделал, и он работает до сих пор, если у кого-то есть лучшее решение, очень приветствую. Надеюсь, это кому-нибудь поможет.

const profile = await userKushala
      .find({_id: '5cd407c741f9e7373f10362c'})
      .populate({
        path: 'settingId',
        populate : {
            path : 'specialty category subscriptionPlan medicine'
            }
      }) 
...