具有关系的模式未保存在数据库中
Schema with relationship is not saved in db
我正在使用基本操作 crud 创建一个 api,我正在使用 mongodb 并且我有 1 个模式需要来自另一个模式的信息,我以这种方式建立了关系,在首先 shema 我有这个。
const mongoose = require('mongoose');
const { Schema } = mongoose;
const geographicalAreaSchema = new Schema({
name: {type: String, required: true}
})
module.exports = mongoose.model('GeographicalArea', geographicalAreaSchema);
带有引用的第二个架构
const mongoose = require('mongoose');
const { Schema } = mongoose;
const zooSchema = new Schema({
name: { type: String, required: true },
nit: { type: String, required: true },
geographicalArea: { type: Schema.ObjectId, ref: "GeographicalArea" }
})
module.exports = mongoose.model('Zoo', zooSchema);
在控制器中有这个代码来保存新的动物园
const zoo = require('../models/zoo');
const mongoose = require('mongoose');
const GeographicalArea = mongoose.model('GeographicalArea');
const zooController = {};
zooController.createZoo = async(req, res) => {
const saveZoo = new zoo({
name: req.body.name,
nit: req.body.nit,
geographicalAreaName: req.body.geographicalArea.name //this item have data
});
await saveZoo.save()
res.json({
'status': 'Zoo Save'
})
};
module.exports = zooController;
这是路由文件
const express = require('express');
const router = express.Router();
const zoo = require('../controllers/zoo.controller');
router.post('/', zoo.createZoo)
module.exports = router;
这是索引文件
const express = require('express');
const morgan = require('morgan');
const app = express();
const { mongoose } = require('./database');
//Settings
app.set('port', process.env.PORT || 3000);
//Middlewares
app.use(morgan('dev'));
app.use(express.json());
//Routes
app.use('/api/geographicalArea', require('./routes/geographicalArea.routes'));
app.use('/api/zoo', require('./routes/zoo.routes'));
//Starting server
app.listen(app.get('port'), () => {
console.log('Server on port', app.get('port'))
})
当我像这样从 post 人那里发出 post 请求时
我看看req有没有带数据
并且我调试验证数据保存正确,geographicalArea字段returns未定义
我不知道为什么这个属性未定义
试试这个方法。
const zoo = require('../models/zoo')
const mongoose = require('mongoose')
const GeographicalArea = mongoose.model('GeographicalArea')
const zooController = {}
zooController.createZoo: async (req, res) => {
try {
const zooInfo = {
name: req.body.name,
nit: req.body.nit,
geographicalAreaName: req.body.geographicalArea.name
}
const zooSave = await zoo.create(zooInfo)
console.log(zooInfo)
zooSave.save()
res.json({ status: "zoo saved "})
} catch(error) {
res.json({ error })
}
}
通过仅从邮递员发送我想与动物园相关的地理区域 ID 来解决问题,这样我就可以获得包含所有信息的对象。
发送数据
zooController.createZoo = async(req, res) => {
const saveZoo = new zoo({
name: req.body.name,
nit: req.body.nit,
geographicalArea: req.body.geographicalArea
});
await saveZoo.save()
res.json({
'status': 'Zoo Save'
})
};
我确认我得到了数据
我正在使用基本操作 crud 创建一个 api,我正在使用 mongodb 并且我有 1 个模式需要来自另一个模式的信息,我以这种方式建立了关系,在首先 shema 我有这个。
const mongoose = require('mongoose');
const { Schema } = mongoose;
const geographicalAreaSchema = new Schema({
name: {type: String, required: true}
})
module.exports = mongoose.model('GeographicalArea', geographicalAreaSchema);
带有引用的第二个架构
const mongoose = require('mongoose');
const { Schema } = mongoose;
const zooSchema = new Schema({
name: { type: String, required: true },
nit: { type: String, required: true },
geographicalArea: { type: Schema.ObjectId, ref: "GeographicalArea" }
})
module.exports = mongoose.model('Zoo', zooSchema);
在控制器中有这个代码来保存新的动物园
const zoo = require('../models/zoo');
const mongoose = require('mongoose');
const GeographicalArea = mongoose.model('GeographicalArea');
const zooController = {};
zooController.createZoo = async(req, res) => {
const saveZoo = new zoo({
name: req.body.name,
nit: req.body.nit,
geographicalAreaName: req.body.geographicalArea.name //this item have data
});
await saveZoo.save()
res.json({
'status': 'Zoo Save'
})
};
module.exports = zooController;
这是路由文件
const express = require('express');
const router = express.Router();
const zoo = require('../controllers/zoo.controller');
router.post('/', zoo.createZoo)
module.exports = router;
这是索引文件
const express = require('express');
const morgan = require('morgan');
const app = express();
const { mongoose } = require('./database');
//Settings
app.set('port', process.env.PORT || 3000);
//Middlewares
app.use(morgan('dev'));
app.use(express.json());
//Routes
app.use('/api/geographicalArea', require('./routes/geographicalArea.routes'));
app.use('/api/zoo', require('./routes/zoo.routes'));
//Starting server
app.listen(app.get('port'), () => {
console.log('Server on port', app.get('port'))
})
当我像这样从 post 人那里发出 post 请求时
我看看req有没有带数据
并且我调试验证数据保存正确,geographicalArea字段returns未定义
我不知道为什么这个属性未定义
试试这个方法。
const zoo = require('../models/zoo')
const mongoose = require('mongoose')
const GeographicalArea = mongoose.model('GeographicalArea')
const zooController = {}
zooController.createZoo: async (req, res) => {
try {
const zooInfo = {
name: req.body.name,
nit: req.body.nit,
geographicalAreaName: req.body.geographicalArea.name
}
const zooSave = await zoo.create(zooInfo)
console.log(zooInfo)
zooSave.save()
res.json({ status: "zoo saved "})
} catch(error) {
res.json({ error })
}
}
通过仅从邮递员发送我想与动物园相关的地理区域 ID 来解决问题,这样我就可以获得包含所有信息的对象。
发送数据
zooController.createZoo = async(req, res) => {
const saveZoo = new zoo({
name: req.body.name,
nit: req.body.nit,
geographicalArea: req.body.geographicalArea
});
await saveZoo.save()
res.json({
'status': 'Zoo Save'
})
};
我确认我得到了数据