首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“猫鼬”链接2个集合

使用“猫鼬”链接2个集合
EN

Stack Overflow用户
提问于 2021-02-18 21:37:37
回答 1查看 185关注 0票数 0

我试图通过保存两个集合之间的引用来将它们连接到一起,但是我一直在研究如何插入数组。我有以下模式:

公司模式

代码语言:javascript
复制
const mongoose = require('mongoose')

const companySchema = mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  projects: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Project'
  }]
})

module.exports = mongoose.model('company', companySchema, 'companies')

项目模式

代码语言:javascript
复制
const mongoose = require('mongoose')

const projectSchema = mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  company: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Company'
  }
})

module.exports = mongoose.model('project', projectSchema, 'projects')

我的创建项目路由器看起来像这个

代码语言:javascript
复制
router.post('/create', async function(req, res) {
  try {
    let project = new Project({ name: req.body.name, company: req.body.company })
    await project.save()
    res.status(201).send({ project })
  } catch (error) {
    res.status(500).json({
      error: 'Server error while creating project'
    })
  }
})

它正确地创建了Project。但是现在我需要它也将新创建的Project推到Company模式的projects数组中。会很感激你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-02-18 23:23:55

听起来更像是要引用与公司相关的项目,而不是实际添加对这些项目的引用。要做到这一点,您需要将公司的id存储到您的新项目中,我希望这就是您的req.body.company字段所代表的。

一旦每个新项目包含有效的companyId,您可能需要检查与同一公司关联的项目列表。为此,您需要在公司文档中填充一个虚拟字段:

代码语言:javascript
复制
companySchema.virtual('projects', {
  ref: 'Projects',
  localField: 'id',
  foreignField: 'companyId'
})

当然,只有在稍微修改模式的情况下,这才能起作用:

代码语言:javascript
复制
const companySchema = mongoose.Schema({
  name: {
    type: String,
    required: true
  }
})

const projectSchema = mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  companyId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Company'
  }
})

最后,无论何时要检查公司的项目,都必须使用companyDocument.populate('projects').execPopulate()填充projects字段。这样,companyDocument.projects将包含您要寻找的数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66268518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档