mongoose 集合联表问题

发布于 2022-09-06 06:17:20 字数 397 浏览 10 评论 0

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 值,这里如何做?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静谧 2022-09-13 06:17:20
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);
  });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文