Как исправить ошибку «Преобразовать во встроенный сбой для значения» в mongoose - PullRequest
0 голосов
/ 13 июня 2019

Я создал схему для пользователей, и в этой схеме у меня есть одно из свойств в качестве «заказов», значение которого установлено для другой схемы. Я не могу обновить документы в свойстве '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} "на пути" заказы ""

1 Ответ

0 голосов
/ 26 июля 2019

В вашем интерфейсе 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
}

, тогда как в вашем порядке она указана как число. Измените тип данных в вашем интерфейсе на номер

orders : [{
        orderNumber: number,
        orderDate: string | Date,
        orderedItem: {
            name: string
        },
        price: number
    }]

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...