鍍金池/ 問答/數(shù)據(jù)庫(kù)  HTML/ mongoose 集合聯(lián)表問題

mongoose 集合聯(lián)表問題

userSchema

{
  name: String
}

ContentSchema

{
  uid: mongoose.SchemaTypes.ObjectId,
  content: String,
  status: {
      type: Boolean,
      default: true 
  }
}

現(xiàn)在想獲取所有內(nèi)容表 status 為 true 的信息, 可以使用 ContentModel.find({status:true}) 這里返回的數(shù)據(jù) Array 中想把 uid 替換為 user 表的 name 值,這里如何做?

回答
編輯回答
單眼皮
const ObjectId = mongoose.SchemaTypes.ObjectId;
// 使用ref 進(jìn)行關(guān)聯(lián)
const userSchema = new Schema({
  name: String,
  addr: {
    type: ObjectId,
    ref: "address"
  }
});

const addrSchecma = new Schema({
  addr: String,
  uid: {
    type: ObjectId,
    ref: "user"
  }
});

const User = mongoose.model("user", userSchema);
const Addr = mongoose.model("address", addrSchecma);

創(chuàng)建數(shù)據(jù)用例:

const usr1 = {
  name: "user_name"
};

// 創(chuàng)建數(shù)據(jù)
(async () => {
  const usr = await User.create(usr1);
  const addr1 = {
    addr: "addr1",
    uid: usr._id
  };
  const addr2 = {
    addr: "addr2",
    uid: usr._id
  };

  const ins1 = await Addr.create(addr1);
  const ins2 = await Addr.create(addr2);
  return [ins1, ins2];
})()
  .then(console.log)
  .catch(console.log);

接著獲取刪去相關(guān)生成用戶和關(guān)聯(lián)數(shù)據(jù),

// 這里就得到關(guān)聯(lián)數(shù)據(jù)了
(async () => {
  const res = Addr.find().populate("uid");
  return res;
})()
  .then(ins => {
    console.log(ins.uid.name);
  })
  .catch(err => {
    console.log(err);
  });
2017年11月16日 10:30