我有一个名为company
的对象,里面有name(String)
和locations(Array)
在位置内,我希望有一个名为name
的密钥,用户将生成,并使用ObjectID
生成的第二个密钥。 不幸的是,我无法让它按预期工作。
邮递员的例子。请注意,这些位置没有得到_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)
我的控制器
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 => {});