【发布时间】:2020-05-21 11:45:42
【问题描述】:
这里有两个问题。
- 当存在数组时,findOneAndUpdate 的正确方法是什么?以下示例出现 err MongooseError [CastError]: Cast to embedded failed for value 错误。
- 您应该将对象数组变成单独的集合吗?
* 示例 *
var ProductSchema = new Schema({
_id: Schema.Types.ObjectId,
product_name: String
});
var purchaseOrderSchema = new Schema(
{
purchaseOrderNo: Number,
products: [ProductSchema]
}
);
const purchaseOrder = new PurchaseOrder(req.body);
PurchaseOrder.findOneAndUpdate(
{ _id: req.body._id },
{
$set: req.body,
$push: req.body.products
},
{ upsert: true, new: true }
)
.then((result) => {
console.log('result', result);
res.status(200).json(result);
})
.catch((err) => {
console.log('err', err);
res.status(500).json({ error: err });
});
const body = {
_id: 'skjdhflksjdf',
purchaseOrderNo: 1,
products: [
{
_id: '111',
product_name: 'Cup'
},
{
_id: '222',
product_name: 'Spoon'
}
]
}
【问题讨论】:
-
您是在尝试创建新的采购订单还是更新它,为什么行 const purchaseOrder = new PurchaseOrder(req.body)
-
那是快递。对象是 req.body