我得到的錯誤: *CastError: Cast to string failed for value "['ZTM', 'NASA']" (type Array) at path "customers" at model.Query.exec (/Users/mike/Documents/NodeJS -applications/NASA-project/server/node_modules/mongoose/lib/query.js:4891:21) 在 model.Query.Query.then (/Users/mike/Documents/NodeJS-applications/NASA-project/server/node_modules /mongoose/lib/query.js:4990:15) 在 processTicksAndRejections (node:internal/process/task_queues:96:5)
{
訊息格式:未定義,
字串值:"[ 'ZTM', 'NASA' ]",
種類:'字串',
值:['ZTM','NASA'],
路徑:'客戶',
原因:空,
值型別:'陣列'
}
我從貓鼬那里得到這個錯誤,我認為問題出在模式中定義的客戶欄位,它的型別是字串物件陣列
這是代碼
import { getModelForClass, prop, Ref, index } from "@typegoose/typegoose";
import * as mongoose from "mongoose";
import { Planet } from "./planets.typegoose";
@index({ flightNumber: 1 })
class Launch {
@prop({ type: () => Number, required: true })
public flightNumber: number;
@prop({ type: () => Date, required: true })
public launchDate: Date;
@prop({ type: () => String, required: true })
public mission: string;
@prop({ type: () => String, required: true })
public rocket: string;
@prop({ ref: () => Planet, required: true })
public target: Ref<Planet, mongoose.Types.ObjectId>;
@prop({ type: () => [String], required: true })
public customers?: string[];
@prop({ type: () => Boolean, required: true })
public upcoming: boolean;
@prop({ type: () => Boolean, required: true, default: true })
public success: boolean;
}
const LaunchModel = getModelForClass(Launch);
export default LaunchModel;
這是我為啟動界面定義它的形狀和型別的地方:
interface LaunchType {
flightNumber?: number;
mission: string;
rocket: string;
launchDate: Date;
target: string;
customers?: string[];
upcoming?: boolean;
success?: boolean;
}
使用型別注釋“LaunchType”創建 Launch 物件:
const launch: LaunchType = {
flightNumber: 100,
mission: "Kepler Exploration Soran",
rocket: "Saturn IS2",
launchDate: new Date("December 27, 2030"),
target: "kepler-442 b",
customers: ["ZTM", "NASA"],
upcoming: true,
success: true,
};
功能:將此啟動物件保存到 mongodb 集合:
async function saveLaunchToMongoDB(launch: LaunchType): Promise<void> {
await LaunchModel.updateOne(
{
flightNumber: launch.flightNumber,
},
launch,
{ upsert: true }
);
}
當我從模式、介面和啟動物件中洗掉型別為 string[] 的屬性客戶時,我沒有收到任何錯誤,并且能夠將啟動物件保存到 MongoDB 集合
問題可能是屬性客戶,它是介面中的一種字串 [] 或未定義(聯合型別),但在模式中它回傳一個字串建構式
uj5u.com熱心網友回復:
您可以將客戶型別從更改[String]為陣列。
@prop({ type: () => Array, required: true })
public customers? Array;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528254.html
