如何在 mongoose Schema id 中设置特定值?
How to set an specific value in mongoose Schema id?
我需要将特定值传递给 mongoose Schema 的 id 属性,以便关联集合。
我试过传递 _id: false 这样 mongoose 就不会自动创建带有一些随机值的 id 字段。
我写了这个架构:
const mongoose = require('mongoose');
const DetailsSchema = new mongoose.Schema({
_id: String,
name: String,
value: Number
}, {_id: false});
const Details = mongoose.model('details', DetailsSchema);
module.exports = Details;
这是我接收具体值的路由:
router.post('/api/newSolicitation', async (req, res) => {
const { value, id, name } = req.body;
const checkforid = await Details.findOne({id});
if(checkforid) {
const result = await Details.save();
console.log('Detail updated: ', result);
res.json({
success: true,
message: 'Detail Updated'
});
}
else {
const detail = new Details({
id,
name,
value
});
const submit = await detail.save();
console.log('New detail created:', submit);
res.json({
success: true,
message: 'New detail created!'
});
}
});
我收到此错误消息:
UnhandledPromiseRejectionWarning: MongooseError: document must have an _id before saving
我不明白,因为我已经声明了 _id 及其值。
您正在尝试通过 id
而不是 _id
进行搜索和创建。
您有向文档提供_id
或让MongoDB为您生成文档。
删除 { _id: false }
并在插入时提供 _id
,没有 _id
就无法创建文档,因为复制需要 _id
。
router.post('/api/newSolicitation', async (req, res) => {
// destucture id from req.body and rename it to _id
// { property: newPropertyName }
const { id: _id, name, value } = req.body;
const checkforid = await Details.findById(_id);
if(checkforid) {
const result = await Details.save();
console.log('Detail updated: ', result);
return res.json({
success: true,
message: 'Detail Updated'
});
}
const detail = new Details({ _id, name, value }).save();
console.log('New detail created:', detail);
res.json({
success: true,
message: 'New detail created!'
});
});
我需要将特定值传递给 mongoose Schema 的 id 属性,以便关联集合。
我试过传递 _id: false 这样 mongoose 就不会自动创建带有一些随机值的 id 字段。
我写了这个架构:
const mongoose = require('mongoose');
const DetailsSchema = new mongoose.Schema({
_id: String,
name: String,
value: Number
}, {_id: false});
const Details = mongoose.model('details', DetailsSchema);
module.exports = Details;
这是我接收具体值的路由:
router.post('/api/newSolicitation', async (req, res) => {
const { value, id, name } = req.body;
const checkforid = await Details.findOne({id});
if(checkforid) {
const result = await Details.save();
console.log('Detail updated: ', result);
res.json({
success: true,
message: 'Detail Updated'
});
}
else {
const detail = new Details({
id,
name,
value
});
const submit = await detail.save();
console.log('New detail created:', submit);
res.json({
success: true,
message: 'New detail created!'
});
}
});
我收到此错误消息:
UnhandledPromiseRejectionWarning: MongooseError: document must have an _id before saving
我不明白,因为我已经声明了 _id 及其值。
您正在尝试通过 id
而不是 _id
进行搜索和创建。
您有向文档提供_id
或让MongoDB为您生成文档。
删除 { _id: false }
并在插入时提供 _id
,没有 _id
就无法创建文档,因为复制需要 _id
。
router.post('/api/newSolicitation', async (req, res) => {
// destucture id from req.body and rename it to _id
// { property: newPropertyName }
const { id: _id, name, value } = req.body;
const checkforid = await Details.findById(_id);
if(checkforid) {
const result = await Details.save();
console.log('Detail updated: ', result);
return res.json({
success: true,
message: 'Detail Updated'
});
}
const detail = new Details({ _id, name, value }).save();
console.log('New detail created:', detail);
res.json({
success: true,
message: 'New detail created!'
});
});