Я создал схему для пользователей, и в этой схеме у меня есть одно из свойств в качестве «заказов», значение которого установлено для другой схемы. Я не могу обновить документы в свойстве 'orders'. В нем отображается сообщение об ошибке «Преобразование во встроенный сбой» {orderNumber: 6788444, \ n orderDate: \ '30 -08-2018 \ ', \ n orderItem: {name: \' Gamepad \ '}, \ n цена: 599} "на пути" заказы ". «
Сначала я думал, что проблема возникает из-за использования 'findByIdAndUpdate', но это не было проблемой. Позже вместо установки значения 'orders' в другую схему я установил все значения в самом свойстве, но оно не сработало.
Вот пользователь Schema и 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 \ ', \ n orderItem: {name: \' Gamepad \ '}, \ n цена: 599} "на пути" заказы ""