mongoose 集合联表问题

userSchema

{
  name: String
}

ContentSchema

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

现在想获取所有内容表 status 为 true 的信息, 可以使用 ContentModel.find({status:true}) 这里返回的数据 Array 中想把 uid 替换为 user 表的 name 值,这里如何做?

阅读 1.8k
1 个回答
const ObjectId = mongoose.SchemaTypes.ObjectId;
// 使用ref 进行关联
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);

创建数据用例:

const usr1 = {
  name: "user_name"
};

// 创建数据
(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);

接着获取删去相关生成用户和关联数据,

// 这里就得到关联数据了
(async () => {
  const res = Addr.find().populate("uid");
  return res;
})()
  .then(ins => {
    console.log(ins.uid.name);
  })
  .catch(err => {
    console.log(err);
  });
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题