我有一个名为company
的对象,里面有name(String)
和locations(Array)
在位置内部,我希望有一个由用户生成的名为 name
的 key ,以及使用 ObjectID
生成的第二个 key 。
不幸的是我无法让它按预期工作。
Example from Postman 。请注意,这些位置未获取 _id
。
出了什么问题?
我的模型
const mongoose = require('mongoose')
const companySchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: String,
locations: [
{
_id: mongoose.Schema.Types.ObjectId,
name: String
}
]
})
module.exports = mongoose.model('Company', companySchema)
我的 Controller
createCompany: (req, res) => {
const { name, locations } = req.body
const company = new Company({
_id: new mongoose.Types.ObjectId(),
name: name,
locations: locations
})
company
.save()
.then(() => {
res.status(200).json({
company
})
})
.catch(error => {
res.status(500).json({
error
})
})
},
最佳答案
Mongoose 将为文档本身的顶层和嵌套数组创建 _id
,这是默认行为。
因此,应该只使用您想要的字段来定义架构。
const companySchema = new mongoose.Schema({
name: String,
locations: [
{
name: String
}
]
});
module.exports = mongoose.model("Company", companySchema);
或
const locationSchema = new mongoose.Schema({
name: String
});
const companySchema = new mongoose.Schema({
name: String,
locations: [locationSchema]
});
module.exports = mongoose.model("Company", companySchema);
随后您也不需要从 Model 对象创建 _id
。
const company = new Company({
name: name,
locations: locations
});
company
.save()
.then(() => {})
.catch(e => {});
关于node.js - 在 Mongoose 中提交一个模型,其中包含一个带有 ObjectID 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59587295/