将项目添加到猫鼬引用对象数组时出现问题
Posted
技术标签:
【中文标题】将项目添加到猫鼬引用对象数组时出现问题【英文标题】:Problem with adding an item to an array of mongoose reference objects 【发布时间】:2019-09-11 19:45:33 【问题描述】:在我的 NodeJS 和 MongoDB 应用程序中,我有 2 个猫鼬模式:
公司架构:
const companySchema = new Schema(
name:
type: String,
required: true
,
products: [
type: Schema.Types.ObjectId,
ref: 'Product',
required: false
]
);
companySchema.statics.addProduct = function (productId)
let updatedProducts = [...this.products];
updatedProducts.push(productId);
this.products = updatedProducts;
return this.save();
module.exports = mongoose.model(‘Company’, companySchema);
productSchema:
const productSchema = new Schema(
name:
type: String,
required: true
,
quantity:
type: Number,
required: true
);
module.exports = mongoose.model('Product', productSchema);
每次我向productSchema
添加新产品时,我想将新创建的产品的_id
添加到companySchema
中的products
数组中,以便以后轻松访问产品。
为此,我写道:
const Company = require('../models/company');
const Product = require('../models/product ');
exports.postAddProduct = (req, res, next) =>
const name = req.body.name;
const quantity = req.body.quantity;
const product = new Product(
name: name,
quantity: quantity
);
product.save()
.then(product =>
return Company.addProduct(product._id);
)
.then(result =>
res.redirect('/');
)
.catch(err => console.log(err));
我收到一个错误:TypeError: this.products is not iterable
。
【问题讨论】:
【参考方案1】:您正在设置一个静态方法,它是模型而不是文档实例上的方法。
因此,this
指的是模型本身,而不是单个文档。
与文档不同,模型没有一个名为 products 的数组(可迭代),因此无法将其展开到新数组中。
尝试使用 methods 而不是 statics:
companySchema.methods.addProduct = function (productId)
...
我希望这会有所帮助。
【讨论】:
以上是关于将项目添加到猫鼬引用对象数组时出现问题的主要内容,如果未能解决你的问题,请参考以下文章