В mongoose Заполните ссылку на другое поле вместо _id, ссылка на настраиваемое поле не _id - PullRequest
0 голосов
/ 25 октября 2018
    userSchema={
  username: {
    type: String,
    required: true,
    unique: true
  },
  password: {
    type: String,
    required: true
  },
  role: {
    type: String
  }
}

influencerSchema={
user_id: {
  type: Schema.Types.ObjectId,
  ref: 'users'
},
profile: {
  firstname: {
    type: String
  },
  lastname: {
    type: String,
    default: null
  },
  mob: {
    type: String,
    default: null
  },
  email: {
    type: String,
    default: null
  },
  dob: {
    type: Date,
    default: null
  },
  gender: {
    type: String,
    default: null
  }
  }
}


campaign_schema={
CampaignName: {
  type: String,
  required: true
},
Brandcreated: {
  type: Schema.Types.ObjectId,
  required: true
},
status: {
  type: Number,
  default: 0
},
influencers: [{
  influencerId: {
    type: Schema.Types.ObjectId,
    ref:"influencer"
    },
  status: {
    type: Number,
    default: 0
  }
}]
}

Выше представлены 3 схемы, т. Е. Пользователь, влияющий, схема кампании.Использование кода для заполнения приведено ниже:

function(body) {

  return new Promise(function(resolve, reject) {
campaign.find({
      "_id": body.campaignId
    }).populate('influencer')
    .exec(function(err, doc) {
      console.log(err);
      if (err) {
        reject();
      } else {
        resolve(doc);
      }
    });
  });
}

результат, указанный вышеупомянутой функцией:

[
    {

        "status": 0,
        "_id": "5bc4a9bf0c67a642d74ab6d1",
        "influencers": [
            {
                "status": 0,
                "_id": "5bccc0052db612466d8f26fb",
                "influencerId": "5bbef7cd8c43aa1c4e9a09b5"

            }
        ],
        "CampaignName": "testCampaign",
        "Brandcreated": "5bbf7857a7a55d30426cde37",

        "__v": 0
    }
]

и ожидаемый результат

[
    {

        "status": 0,
        "_id": "5bc4a9bf0c67a642d74ab6d1",
        "influencers": [
            {
                "status": 0,
                "_id": "5bccc0052db612466d8f26fb",
                "influencerId": "5bbef7cd8c43aa1c4e9a09b5"
                user_id: {}
                profile:{}
            }
        ],
        "CampaignName": "testCampaign",
        "Brandcreated": "5bbf7857a7a55d30426cde37",

        "__v": 0
    }
]

Может кто-то сказал refиспользовать поле влияния в схеме кампании, я хочу отослать это поле к user_id в схеме влияния вместо поля_ид. Я не знаю, как это сделать.

1 Ответ

0 голосов
/ 25 октября 2018

Вы используете заполнение неправильно.Вы на самом деле не хотите заполнять влияния, но InfluencerId, если я правильно понимаю.Вместо

.populate("influencers")

используйте

.populate({path: "influencers.influencerId"})

Однако это не совсем так, как вы хотите.так как он разрешится к чему-то вроде

"influencers" : [
    "status" : 0,
    "influencerId" : {
        //content of influencer
    }
]

Если вы хотите получить результат, как вы заявили, вам необходимо отобразить массив позже.

...