node.js - 如何修复 Mongoose 中的 'Cast to embedded failed for value'错误

标签 node.js mongodb express mongoose

我已经为用户创建了一个架构,在该架构中,我有一个属性“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/

相关文章:

javascript - 如何在 Nestjs 中刷新 token

node.js - 在 Google Assistant 上捕获十万千万卢比的数字 - Dialogflow

node.js - 如何在express/mongoose应用程序中正确构建数据库调用?

javascript - 如何使用 NodeJS 和 Express 获取数据以显示行数?

javascript - 从 discord.js 中的消息获取表情符号 url

python - 使用 scrapy python 爬取 NodeJs 和 AngularJs 站点

javascript - 如何在嵌套子文档mongodb中查找带有数组的字段?

node.js - 如何在 Mongoose 上使用 "LIKE"运算符?

c++ - CreateUser 使用 mongocxx 3.1.1 C++ 失败

node.js - 使用 fetch 方法从 Express 端点获取数据显示错误 React Redux