Примерът от документите на mongoose, който посочихте, използва Number
за personSchema._id
поле и ObjectId
за останалите.
Предполагам, че правят това в примера само за да демонстрират, че е възможно да се използва и двете. Ако не посочите _id
в схемата, ObjectId
ще бъде по подразбиране.
Тук всички ваши записи имат _id
поле, което е ObjectId
, но вие се отнасяте към тях като към числа. Освен това, полета като personID
и taskID
не съществуват, освен ако не сте пропуснали частта, в която ги дефинирате.
Ако сте искали да използвате числа за всичките си _id
полета, ще трябва да дефинирате това в схемите.
var newsSchema = new Schema({
_id: Number,
_creator: {type: ObjectId, ref: "Person"},
// ...
})
var personSchema = new Schema({
_id: Number,
// ...
})
След това, за да създадете новина с определен идентификатор и да го присвоите на създател:
var tony = new Person({_id: 0});
var newsItem = new NewsItem({_id: 0, creator: tony.id});
Тук обаче трябва да се отбележи, че когато използвате нещо различно от ObjectId
като _id
поле, вие поемате отговорността сами да управлявате тези ценности. ObjectId се генерират автоматично и не изискват допълнително управление.
Редактиране:Забелязах също, че съхранявате препратки от двете страни на вашите асоциации. Това е напълно валидно и може да искате да го направите понякога, но имайте предвид, че ще трябва сами да се погрижите за съхраняването на препратките в pre
кука.