如何在Mongoose中向关联的另一个Schema添加引用和对应数据
Mongoose关联Owner和Shop新增数据实现方案
你当前的Schema定义是Owner的shopPlace字段关联Shop集合的_id,共有两种常用的新增关联数据的写法:
方式1:新增Owner时同时创建关联Shop
适合注册店主时同步提交店铺信息的场景,代码示例:
const Owner = require("../models/ownerSchema"); const Shop = require("../models/shopSchema"); // 先引入Shop模型 const addOwnerWithShop = async (req, res) => { try { // 1. 先创建保存Shop数据 const newShop = new Shop({ location: req.body.shopLocation, startDate: req.body.shopStartDate, endDate: req.body.shopEndDate }); const savedShop = await newShop.save(); // 2. 创建Owner数据,把刚生成的Shop _id放到shopPlace数组里 const newOwner = new Owner({ fname: req.body.fname, lname: req.body.lname, shopPlace: [savedShop._id] // 若支持多店铺,后续可push新的id }); const savedOwner = await newOwner.save(); console.log("店主和关联店铺新增成功"); res.status(200).json(savedOwner); } catch (err) { console.log(err); res.status(500).json({ error: err.message }); } };
方式2:给已存在的Owner新增关联Shop
适合店主后续新增店铺的场景,需要传入已有Owner的id:
const addShopToExistOwner = async (req, res) => { try { // 1. 先创建并保存Shop const newShop = new Shop({ location: req.body.shopLocation, startDate: req.body.shopStartDate, endDate: req.body.shopEndDate }); const savedShop = await newShop.save(); // 2. 找到对应Owner,把Shop的_id推入shopPlace数组 const updatedOwner = await Owner.findByIdAndUpdate( req.body.ownerId, // 传入要关联的已有Owner的_id { $push: { shopPlace: savedShop._id } }, // $push往数组加新值,不会覆盖旧数据 { new: true } // 返回更新后的Owner数据 ); console.log("店铺新增并关联成功"); res.status(200).json(updatedOwner); } catch (err) { console.log(err); res.status(500).json({ error: err.message }); } };
关联查询说明
查询Owner同时需要带出关联的Shop完整数据时,使用populate方法即可:
// 查询指定id的Owner,同时返回关联的所有Shop数据 const ownerWithShops = await Owner.findById(ownerId).populate('shopPlace');
内容的提问来源于stack exchange,提问作者user16041868
相关产品推荐
相关产品推荐

