typescript - Omvandling till ObjectId misslyckades för user_id
Jag vill skapa ett inlägg i en tråd så att varje gång en användare skapar en tråd kommer den att kopplas till användarmodellen genom att uppdatera användardokumentet genom att lägga till det nyligen skapade trådid:t i användarens tråd-array. Men jag stöter på ett fel när jag vill skapa en tråd. Vänligen hjälp mig.
Misslyckades med att skapa tråd: Trådvalidering misslyckades: författare: Omvandling till ObjectId misslyckades för värdet "user_2TXrt6taAgNcj0meuTHUEuxQ364" (typ sträng) på sökvägen "author" på grund av "BSONError"
Jag har säkerställt att värdet i fältet "author" tilldelas korrekt och matchar den förväntade datatypen (ObjectId i detta fall)
Svar #1
Hej, jag gör samma trådprojekt, så lägg bara till detta segment i PostThread.tsx inuti posttråden
const [userData, setUserData] = useState(null);
useEffect(() => {
// Fetch user data
fetchUser(userId)
.then((user) => {
setUserData(user);
})
.catch((error) => {
// Handle error
});
}, [userId]);
efter att ha bytt författare till userId.id behåll resten samma
const onSubmit = async (values: z.infer<typeof ThreadValidation>) => {
await createThread({
text: values.thread,
author: userId._id,
communityId: null,
path: pathname,
});
});
Den grundläggande orsaken till detta problem var att du använde det anpassade id-fältet i ditt User-schema istället för det MongoDB-genererade _id-fältet. För att lösa problemet behövde du hämta och använda det faktiska _id-värdet från dina användardata när du skapade en tråd.
Svar #2
Som felet nämner, user_2TXrt6taAgNcj0meuTHUEuxQ364 är inte ett giltigt objekt-ID. Du behöver ändra ditt mongoose-schema så att User är av typen String
Ett giltigt objekt-ID kommer att se ut ungefär som 638c6c2875345eefb8aafa28
I ditt fall,
author: {
type: String,
ref: "User"
required: true,
},
Och du behöver också ändra användarschemat.
