我已经为用户创建了一个架构,在该架构中,我有一个属性“orders”,其值设置为另一个架构。我无法更新“订单”属性中的文档。它显示一条错误,指出路径“orders”处的“转换到嵌入失败“{ orderNumber: 6788444,\n orderDate:\'30-08-2018\',\n OrderedItem: { name:\'Gamepad\' },\n Price: 599 }”。 '
我最初认为问题是由于使用“findByIdAndUpdate”而发生的,但这不是问题。后来,我没有将“orders”值设置为另一个架构,而是设置了属性本身的所有值,但它不起作用。
这是 userSchema 和ordersSchema:-
import {Schema, Document } from 'mongoose';
import * as mongoose from 'mongoose';
interface userInfo extends Document{
name: string,
username: string,
password: string,
orders : [{
orderNumber: string,
orderDate: string | Date,
orderedItem: {
name: string
},
price: number
}],
email: string,
address: string,
subscription: boolean
}
let orderSchema : Schema = new Schema({
orderNumber: {
type: Number,
required: true
},
orderDate:{
type: Date,
required: true
},
orderedItem: {
name: {
type: String,
required: true
}
},
price: {
type: Number,
required: true
}
})
let userSchema : Schema = new Schema({
name: {
type: String,
required: true
},
username: {
type: String,
required: true
},
password:{
type: String,
required: true
},
email: {
type: String,
required: true
},
address: {
type:String
},
subscription:{
type: Boolean
},
orders: [orderSchema]
});
let UserModel = mongoose.model<userInfo>('User', userSchema);
export {UserModel};
这是我尝试更新子文档的代码:-
import {UserModel} from '../models/user';
import * as express from 'express';
const router = express.Router();
router.put('/newOrder/:id', async(req: Request, res: Response)=> {
let newOrder = {
orderNumber: req.body.orderNumber,
orderDate: req.body.orderDate,
orderedItem: req.body.orderedItem,
price: req.body.price
};
const user = await UserModel.findOneAndUpdate({_id: req.params.id}, {$push:{orders: newOrder}}, {new: true});
res.send(user);
})
这是我在 Postman 中给出的值:-
{
"orderNumber": 6788444,
"orderDate": "30-08-2018",
"orderedItem": {
"name": "Gamepad"
},
"price": 599
}
错误为“CastError: 值“{ orderNumber: 6788444,\n orderDate:\'30-08-2018\',\n OrderedItem: { name:\'Gamepad\' },\n Price: 599 }”在路径“orders”中的转换为嵌入失败“
最佳答案
在您的 userInfo 接口(interface)中,orderNumber 的数据类型被指定为字符串。
interface userInfo extends Document{
name: string,
username: string,
password: string,
orders : [{
orderNumber: string,
orderDate: string | Date,
orderedItem: {
name: string
},
price: number
}],
email: string,
address: string,
subscription: boolean
}
而在您的 orderSchema 中,它被指定为数字。 将界面中的数据类型更改为数字
orders : [{
orderNumber: number,
orderDate: string | Date,
orderedItem: {
name: string
},
price: number
}]
这应该有效。
关于node.js - 如何修复 Mongoose 中的 'Cast to embedded failed for value'错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56587612/