Przykład z dokumentów mangusty, do których się odwołujesz, używa Number
dla personSchema._id
pole i ObjectId
dla innych.
Zakładam, że robią to w przykładzie tylko po to, aby pokazać, że można użyć obu. Jeśli nie określisz _id
w schemacie ObjectId
będzie domyślnym.
Tutaj wszystkie Twoje rekordy mają _id
pole będące ObjectId
, ale traktujesz je jak liczby. Ponadto pola takie jak personID
i taskID
nie istnieją, chyba że pominąłeś część, w której je definiujesz.
Jeśli chcesz używać numerów dla wszystkich swoich _id
pola, musisz to zdefiniować w schematach.
var newsSchema = new Schema({
_id: Number,
_creator: {type: ObjectId, ref: "Person"},
// ...
})
var personSchema = new Schema({
_id: Number,
// ...
})
Następnie, aby utworzyć wiadomość o określonym identyfikatorze i przypisać ją do twórcy:
var tony = new Person({_id: 0});
var newsItem = new NewsItem({_id: 0, creator: tony.id});
Należy jednak zauważyć, że gdy używasz czegoś innego niż ObjectId
jako _id
dziedzinie, sam bierzesz na siebie odpowiedzialność za zarządzanie tymi wartościami. Identyfikatory obiektów są generowane automatycznie i nie wymagają dodatkowego zarządzania.
Edycja:zauważyłem również, że przechowujesz referencje po obu stronach swoich skojarzeń. Jest to całkowicie poprawne i czasami możesz chcieć to zrobić, ale pamiętaj, że musisz sam zadbać o przechowywanie referencji w pre
hak.