我已经为用户创建了一个架构,在该架构中,我具有其中一个属性作为“订单”,其值设置为另一个架构。我无法更新“订单”属性中的文档。它显示一个错误,提示“铸造到嵌入式失败” {订单号:6788444,\ n orderDate:\ '30 -08-2018 \',\ norderedItem:{名称:\'Gamepad \'},\ n价格:599}在路径“ orders”上。 '
我最初以为是因为使用了'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);
})
以下是我在邮递员中提供的值:-
{
"orderNumber": 6788444,
"orderDate": "30-08-2018",
"orderedItem": {
"name": "Gamepad"
},
"price": 599
}
错误为“ CastError:投射到值的嵌入失败” {orderNumber:6788444,\ n orderDate:\ '30 -08-2018 \',\ norderedItem:{名称:\'Gamepad \'},\ n价格:599}”,位于路径“订单”“
答案 0 :(得分:0)
在userInfo界面中,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
}]
应该可以。