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.